home *** CD-ROM | disk | FTP | other *** search
Text File | 1995-03-15 | 80.0 KB | 1,932 lines |
- %% xy.tex from $Id: xy.doc,v 2.12 1994/10/25 11:55:12 kris Exp $
- %%
- %% Basic XY-pictures: XY-pic bootstrap and kernel macros.
- %% Copyright (c) 1991-1994 Kristoffer H. Rose <kris@diku.dk>
- %%
- %% This file is part of the XY-pic package for graphs and diagrams in TeX.
- %% Copyright (c) 1991-1994 Kristoffer H. Rose <kris@diku.dk>
- %%
- %% The XY-pic package is free software; you can redistribute it and/or modify
- %% it under the terms of the GNU General Public License as published by the
- %% Free Software Foundation; either version 2 of the License, or (at your
- %% option) any later version.
- %%
- %% The XY-pic package is distributed in the hope that it will be useful, but
- %% WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- %% or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- %% for more details.
- %%
- %% You should have received a copy of the GNU General Public License along
- %% with this package; if not, write to the Free Software Foundation, Inc.,
- %% 675 Mass Ave, Cambridge, MA 02139, USA.
- %%
- \ifx\xyloaded\undefined\else \message{not reloaded}\endinput \fi
- \let\xyloaded=\relax
- \message{Bootstrap\string'ing\string:}
- {\catcode96 12\catcode`\#6\catcode`\.12\catcode`\:12\catcode`\'12\catcode`\@11
- \ifx\xywarnifdefined\undefined\else \immediate\write16{}%
- \immediate\write16{%
- XY-pic Warning: \string\xywarnifdefined\space redefined.}%
- \immediate\write16{}\fi
- \gdef\xywarnifdefined#1{\ifx#1\undefined\else \immediate\write16{}%
- \immediate\write16{%
- XY-pic Warning: `\string#1' redefined.}\immediate\write16{}\fi}
- \xywarnifdefined\xydef@ \gdef\xydef@#1{\xywarnifdefined#1\def#1}
- \xywarnifdefined\xylet@ \gdef\xylet@#1{\xywarnifdefined#1\let#1}
- \xywarnifdefined\xynew@
- \gdef\xynew@#1#2{\xywarnifdefined#2\csname new#1\endcsname#2}}
- \message{catcodes\string,}
- \xywarnifdefined\xyuncatcodes \edef\xyuncatcodes{%
- \catcode92 0 \catcode123 1 \catcode125 2 \catcode37 14
- \catcode 9 \the\catcode 9 \catcode10 \the\catcode10 \catcode12 \the\catcode12
- \catcode35 \the\catcode35 \catcode36 \the\catcode36 \catcode38 \the\catcode38
- \catcode43 \the\catcode43 \catcode45 \the\catcode45 \catcode46 \the\catcode46
- \catcode47 \the\catcode47
- \catcode60 \the\catcode60 \catcode61 \the\catcode61 \catcode62 \the\catcode62
- \catcode64 \the\catcode64 \catcode96 \the\catcode96
- \newlinechar \the\newlinechar \endlinechar \the\endlinechar }
- \xywarnifdefined\xycatcodes \def\xycatcodes{%
- \catcode 9 10
- \catcode35 6 \catcode 36 3 \catcode 38 4
- \catcode43 12 \catcode 45 12 \catcode 46 12 \catcode 47 12
- \catcode60 12 \catcode 61 12 \catcode 62 12
- \catcode64 11 \catcode 96 12 }
- \xycatcodes
- \message{docmode,}
- {\catcode`\|0 \xywarnifdefined|DOCMODE
- \gdef|DOCMODE#1{\ifx(#1\relax \xycatcodes \expandafter\ignorespaces
- \else \skipspecials@ \expandafter\docm@\fi}%
- \xywarnifdefined\skipspecials@
- \gdef\skipspecials@{%
- \catcode`\\12 \catcode`\{12 \catcode`\}12 \catcode`\#12 \catcode`\%12
- \catcode`\^^L12 \endlinechar`\^^J }%
- \catcode`\/=12 \lccode`\/`\\%
- \lccode`\D`\D \lccode`\O`\O \lccode`\C`\C \lccode`\M`\M \lccode`\E`\E
- \lowercase{%
- \xywarnifdefined\docm@ \gdef\docm@{\docm@i}%
- \xywarnifdefined\docm@i \gdef\docm@i#1^^J{\docm@ii#1/DOCMODE\docm@iii}%
- \xywarnifdefined\docm@ii
- \gdef\docm@ii#1/DOCMODE{\def\next@{#1}\futurelet\next\docm@iii}%
- \xywarnifdefined\docm@iii \gdef\docm@iii#1\docm@iii{%
- \ifx\next\docm@iii \let\next\next@ \docecho@ \let\next@\docm@
- \else\ifx\next@\empty \let\next@\docfinish@
- \else \edef\next@{\noexpand\docm@iv\next@/DOCMODE#1\noexpand\docm@iv}%
- \fi\fi \next@}%
- \xywarnifdefined\docm@iv
- \gdef\docm@iv#1/DOCMODE\docm@iv{\def\next{#1}\docecho@ \docm@}}%
- \xywarnifdefined\docecho@ \global\let\docecho@\relax
- \xywarnifdefined\docfinish@ \gdef\docfinish@{\xyuncatcodes|DOCMODE\next}}
- \xydef@\xydefcsname@#1{\DN@{#1}\DNii@##1{%
- \ifx ##1\relax\else \xywarning@{`\string##1\string' redefined.}\fi \def##1}%
- \expandafter\nextii@\csname\codeof\next@\endcsname}
- \xydef@\xyletcsnamecsname@#1#2{\def\1{#1}\def\2{#2}\DN@##1##2{%
- \ifx ##1\relax\else \xywarning@{`\string##1\string' redefined.}\fi
- \let##1=##2}%
- \expandafter\expandafter\expandafter\next@
- \expandafter\csname\expandafter\codeof\expandafter\1\expandafter\endcsname
- \csname\codeof\2\endcsname}
- \xywarnifdefined\codeof
- \xywarnifdefined\codeof@
- {\catcode`\:=12 \catcode`\>=12
- \gdef\codeof#1{\expandafter\codeof@\meaning#1<-:}
- \gdef\codeof@#1:->#2<-:{#2}}
- \xydef@\charof#1{\expandafter\c@arof@\meaning#1}
- \xywarnifdefined\charof@
- {\let\1=\gdef \let\2=\catcode \2`\t=12 \2`\h=12 \2`\e=12
- \1\c@arof@ the #1 #2{#2}}
- \xydef@\xymakeADD@#1#2 #3 {\ifnum\catcode#3=6 \xydef@#1##1{##1#2#2}%
- \else\xydef@#1##1{##1#2}\fi}
- \def\next{\xymakeADD@\addAT@}
- \xyuncatcodes
- \next @ 64 \catcode 64 11
- \xymakeADD@\addHASH@ # 35
- \xymakeADD@\addDOLL@ $ 36
- \xymakeADD@\addAND@ & 38
- \xymakeADD@\addRQ@ ' 39
- \xymakeADD@\addPLUS@ + 43
- \xymakeADD@\addDASH@ - 45
- \xymakeADD@\addDOT@ . 46
- \xymakeADD@\addLT@ < 60
- \xymakeADD@\addEQ@ = 61
- \xymakeADD@\addGT@ > 62
- \xymakeADD@\addLQ@ ` 96
- \xycatcodes
- \input xyidioms
- \xydef@\stripRCS$#1${\stripRCS@#1: @@ @@@}
- \xydef@\stripRCS@#1: #2@ #3@@@{%
- \ifx @#2\string?\else\ifx :#2\else\stripRCS@@#2\fi\fi}
- \xydef@\stripRCS@@#1 #2: @{#1}
- \edef\next{\stripRCS$Revision: 2.12 $}
- \edef\next@{\stripRCS$Locker: $}
- \xylet@\xyversion=\next
- \def\next{ @}\ifx\next\next@\else \edef\xyversion{\xyversion.\next@}\fi
- \edef\next{\stripRCS$Date: 1994/10/25 11:55:12 $}
- \xylet@\xydate=\next
- \def\next{ @}\ifx\next\next@\else\edef\xydate{\xydate\space(work version)}\fi
- \xydef@\XYgreet@{%
- \W@{}%
- \W@{ XY-pic version \xyversion\space<\xydate>}%
- \W@{ Copyright (c) 1991-1994 by Kristoffer H. Rose <kris@diku.dk>}%
- \W@{ XY-pic is free software: see the User\string's Guide for details.}%
- \W@{}}
- \XYgreet@
- \expandafter\everyjob\expandafter{\the\everyjob\XYgreet@}
- \message{Loading kernel:}
- \xydef@\XY{\leavevmode
- \hbox{\kern-.1em X\kern-.3em\lower.4ex\hbox{Y\kern-.15em}}}
- \xylet@\Xy=\XY
- \message{messages;}
- \xywarnifdefined\thelineno@
- \ifx\inputlineno\undefined \edef\thelineno@{\string?}
- \else \def\thelineno@{\the\inputlineno}\fi
- \xydef@\xytracelineno@{ \string[\jobname:\thelineno@\string]}
- \xydef@\xywarning@#1{{\newlinechar=`\^^J%
- \W@{}\W@{XY-pic Warning: #1\xytracelineno@.}\W@{}}}
- \xydef@\xyerror@#1#2{{\DNii@{#2}\newlinechar=`\^^J%
- \ifx\nextii@\empty \errhelp{See the XY-pic manual for further information.}%
- \else \errhelp{#2}\fi
- \errmessage{XY-pic error: #1}}}
- \xydef@\xybug@#1{{\newlinechar=`\^^J%
- \errhelp{This is a bug in XY-pic and should not happen!^^J%
- If it did then please send a bug report with the offending XY-pic code^^J%
- to the author of XY-pic, kris@diku.dk.}%
- \errmessage{XY-pic BUG: #1 -- notify kris@diku.dk.}}}
- \message{fonts;}
- \xydef@\xyfont@#1{\ifx#1\undefined \DN@{\global\font#1}\expandafter\next@
- \else \xywarning@{Using previously loaded \string#1\space font.}\fi}
- \xyfont@\xydashfont=xydash10
- \xydef@\xydashl@{\fontdimen6\xydashfont}
- \xydef@\xydashh@{\fontdimen5\xydashfont}
- \xydef@\xydashw@{\fontdimen8\xydashfont}
- \xyfont@\xyatipfont=xyatip10
- \xyfont@\xybtipfont=xybtip10
- \xyfont@\xybsqlfont=xybsql10
- \xydef@\xybsqll@{\fontdimen6\xybsqlfont}
- \xydef@\xybsqlh@{\fontdimen5\xybsqlfont}
- \xydef@\xybsqlw@{\fontdimen8\xybsqlfont}
- \xyfont@\xycircfont=xycirc10
- \message{allocations:}
- \message{state,}
- \xynew@{dimen}\Xc
- \xynew@{dimen}\Yc
- \xynew@{dimen}\Uc
- \xynew@{dimen}\Dc
- \xynew@{dimen}\Lc
- \xynew@{dimen}\Rc
- \xynew@{toks}\Edgec
- \xynew@{dimen}\Xp
- \xynew@{dimen}\Yp
- \xynew@{dimen}\Up
- \xynew@{dimen}\Dp
- \xynew@{dimen}\Lp
- \xynew@{dimen}\Rp
- \xynew@{toks}\Edgep
- \xynew@{dimen}\Xorigin \Xorigin=\z@
- \xynew@{dimen}\Yorigin \Xorigin=\z@
- \xynew@{dimen}\Xxbase \Xxbase=1mm
- \xynew@{dimen}\Yxbase \Yxbase=\z@
- \xynew@{dimen}\Xybase \Xybase=\z@
- \xynew@{dimen}\Yybase \Yybase=1mm
- \xynew@{dimen}\Xmin
- \xynew@{dimen}\Ymin
- \xynew@{dimen}\Xmax
- \xynew@{dimen}\Ymax
- \xynew@{box}\lastobjectbox@
- \xynew@{box}\zerodotbox@
- \setbox\zerodotbox@=\hbox{\dimen@=.5\xydashw@
- \kern-\dimen@ \vrule width\xydashw@ height\dimen@ depth\dimen@}
- \wd\zerodotbox@=\z@ \ht\zerodotbox@=\z@ \dp\zerodotbox@=\z@
- \message{direction,}
- \xynew@{dimen}\dX
- \xynew@{dimen}\dY
- \xydef@\sdX{}
- \xydef@\sdY{}
- \xynew@{count}\K \K=1024
- \xynew@{count}\KK@ \KK@=32
- \xynew@{count}\Direction
- \xynew@{dimen}\K@dXdY
- \xynew@{dimen}\K@dYdX
- \xydef@\cosDirection{}
- \xydef@\sinDirection{}
- \xywarnifdefined\DirectionChar
- \xywarnifdefined\SemiDirectionChar
- \xynew@{read}\xyread@
- \xynew@{write}\xywrite@
- \xynew@{count}\csp@
- \xynew@{dimen}\quotPTK@
- \message{utility macros;}
- \xydef@\addtotoks@#1{\toks@=\expandafter{\the\toks@#1}}
- \xydef@\prependtotoks@#1{%
- \expandafter\def\expandafter\prependtotoks@@\expandafter{\the\toks@}%
- \toks@=\expandafter\expandafter\expandafter{%
- \expandafter\prependtotoks@@\the\toks@}}
- \xylet@\prependtotoks@@=\relax
- \xydef@\xyinputorelse@#1#2{\openin\xyread@=#1
- \ifeof\xyread@ \DN@{#2}\else \DN@{\closein\xyread@\input#1 }\fi \next@}
- \global\csp@=\z@
- \xydef@\enter@#1{\global\advance\csp@\@ne
- \expandafter\xdef\csname cs@\number\csp@\endcsname{#1}\ignorespaces}
- \xydef@\nter@#1{\global\advance\csp@\@ne
- \expandafter\gdef\csname cs@\number\csp@\endcsname{#1}\ignorespaces}
- \xydef@\dontleave@{\csname cs@\number\csp@\endcsname}
- \xydef@\unenter@{\global\advance\csp@\m@ne}
- \xydef@\leave@{\expandafter\unenter@\csname cs@\number\csp@\endcsname}
- \quotPTK@=\p@ \divide\quotPTK@\K
- \xylet@\quotsign@@=\empty
- \xywarnifdefined\removePT@
- {\catcode`p=12 \catcode`t=12 \gdef\removePT@#1pt{#1}}
- \xydef@\quotient@#1#2#3{\A@=#2\relax \B@=#3\relax
- \ifdim\A@<\z@\def\quotsign@@{-}\else\def\quotsign@@{+}\fi
- \ifdim\quotsign@@\A@<15pt \multiply\A@\K
- \else\ifdim\quotsign@@\A@<511pt \multiply\A@\KK@ \divide\B@\KK@
- \else \divide\B@\K \fi\fi
- \ifdim\ifdim\B@<\z@-\fi\B@<\quotPTK@ \xywarning@{division overflow}%
- \else \advance\A@.5\B@ \divide\A@\B@ \fi
- \multiply\A@\quotPTK@ \edef#1{\expandafter\removePT@\the\A@}}
- \xydef@\quotient@@#1#2#3{\A@=#2\relax \B@=#3\relax
- \multiply\A@\KK@ \divide\B@\KK@ \divide\B@ 8
- \ifdim\B@=\z@\else \advance\A@.5\B@ \divide\A@\B@ \fi
- \B@=.125\quotPTK@ \multiply\A@\B@ \edef#1{\expandafter\removePT@\the\A@}}
- \xydef@\loop@#1\repeat@{\def\body@{#1}\iterate@}\xylet@\repeat@=\fi
- \xydef@\iterate@{\body@\expandafter\iterate@\else\fi}
- \xydef@\xyinitial@#1#2{\DN@{#1}%
- \xyerror@{XY-pic command used out of context: \codeof\next@}{}}
- \xylet@\xy@=\xyinitial@
- \xylet@\oxy@=\xy@
- \xydef@\inxy@{T\ifx\xy@\xyinitial@ F\else T\fi}
- \xydef@\xyxy@@ix@{\begingroup
- \xyuncatcodes\afterassignment\endgroup\global\toks9=}
- \xydef@\xy@@{\xy@{}}
- \xydef@\plainxy@{\let\xy@=\xyxy@ \let\oxy@=\xy@ \let\xy@@ix@=\xyxy@@ix@}
- \message{pictures: \string\xy,}
- \xydef@\xy{\hbox\bgroup \aftergroup\xycheck@end
- \setboxz@h\bgroup
- \plainxy@
- \Xc=\z@ \Yc=\z@ \czeroEdge@
- \Xp=\z@ \Yp=\z@ \Up=\z@ \Dp=\z@ \Lp=\z@ \Rp=\z@ \Edgep={\zeroEdge}%
- \Xmin=\hsize \Xmax=-\hsize \Ymin=\hsize \Ymax=-\hsize
- \POS}
- \xydef@\czeroEdge@{\Uc=\z@ \Dc=\Uc \Lc=\Uc \Rc=\Uc \Edgec={\zeroEdge}}
- \xydef@\xyxy@#1#2{#2}
- \xydef@\endxy{\relax
- \dimen@=\Ymax \advance\dimen@-\Ymin
- \ifdim\dimen@<\z@ \dimen@=\z@ \Ymin=\z@ \Ymax=\z@ \fi
- \dimen@=\Xmax \advance\dimen@-\Xmin
- \ifdim\dimen@<\z@ \dimen@=\z@ \Xmin=\z@ \Xmax=\z@ \fi
- \edef\tmp@{\egroup
- \setboxz@h{\kern-\the\Xmin\boxz@}%
- \ht\z@=\the\Ymax \dp\z@=-\the\Ymin \wdz@=\the\dimen@ \boxz@
- \egroup \noexpand\xy@end
- \Uc=\the\Ymax \Dc=-\the\Ymin \Lc=-\the\Xmin \Rc=\the\Xmax}\tmp@}
- \xydef@\xycheck@end{\xyFN@\xycheck@end@}
- \xydef@\xycheck@end@{\ifx\next\xy@end\DN@\xy@end{}\else\DN@{\xy@end}\fi\next@}
- \xydef@\xy@end{%
- \xyerror@{An \string\xy\space environment is not closed correctly.}%
- {I expected \string\endxy. You probably have an umatched {} grouping.}}
- \message{positions,}
- \xydef@\POS{\afterPOS{}}
- \xydef@\afterPOS#1{%
- \DN@##1{\def\afterPOS@{\def\afterPOS@{##1}#1}}%
- \expandafter\next@\expandafter{\afterPOS@}%
- \afterCOORD{\xyFN@\POS@}}
- \xylet@\afterPOS@=\empty
- \xydef@\afterCOORD#1{%
- \DN@##1{\def\afterCOORD@{\def\afterCOORD@{##1}#1}}%
- \expandafter\next@\expandafter{\afterCOORD@}%
- \afterVECTORorEMPTY{\xy@@\czeroEdge@ \afterCOORD@}{\xyFN@\COORD@}}
- \xylet@\afterCOORD@=\empty
- \xydef@\afterVECTORorEMPTY#1#2{%
- \DN@##1{\def\afterVECTOR@{\def\afterVECTOR@{##1}%
- \ifVECTORempty@\DN@{#2}\else\DN@{#1}\fi \next@}}%
- \expandafter\next@\expandafter{\afterVECTOR@}%
- \xyFN@\VECTOR@}
- \xynew@{if}\ifVECTORempty@
- \xylet@\afterVECTOR@=\empty
- \xydef@\xyVECTOR@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\VECTOR@}%
- \else \ifcat A\noexpand\next \let\next@=\VECTOR@letter
- \else \let\next@=\VECTOR@other \fi\fi \next@}
- \xylet@\VECTOR@=\xyVECTOR@
- \xydef@\VECTOR@letter{%
- \ifx a\next \expandafter\VECTOR@a \else \expandafter\CORNER@ \fi}
- \xydef@\VECTOR@a a(#1){\xy@{a(#1)}{\vfromcartesianangle@{#1}}%
- \VECTORempty@false \afterVECTOR@}
- \xydef@\CORNER@{%
- \xy@{}{\A@=-.5\Lc \advance\A@.5\Rc \B@=-.5\Dc \advance\B@.5\Uc
- \let\nextii@=\zeroit@}%
- \VECTORempty@true\CORNER@i}
- \xydef@\zeroit@#1{#1=\z@}
- \xydef@\CORNER@i{%
- \ifx D\next \DN@ D{\xy@{D}{\Yc=-\Dc \nextii@\Xc \B@=\Yc}\CORNER@ii}%
- \else\ifx U\next \DN@ U{\xy@{U}{\Yc= \Uc \nextii@\Xc \B@=\Yc}\CORNER@ii}%
- \else\ifx L\next \DN@ L{\xy@{L}{\Xc=-\Lc \nextii@\Yc \A@=\Xc}\CORNER@ii}%
- \else\ifx R\next \DN@ R{\xy@{R}{\Xc= \Rc \nextii@\Yc \A@=\Xc}\CORNER@ii}%
- \else\ifx C\next \DN@ C{\xy@{C}{\Xc= \A@ \Yc= \B@}\CORNER@ii}%
- \else\ifx E\next \DN@ E{\xy@{E}{%
- \A@=\Xc \B@=\Yc \the\Edgec\z@ \advance\Xc-\A@ \advance\Yc-\B@}\CORNER@ii}%
- \else\ifx P\next \DN@ P{\xy@{P}{%
- \A@=\Xc \B@=\Yc \the\Edgec\thr@@ \advance\Xc-\A@ \advance\Yc-\B@}%
- \CORNER@ii}%
- \else\ifx (\next
- \DN@(##1){\xy@{(##1)}{\Xc=##1\Xc \Yc=##1\Yc}\afterVECTOR@}%
- \else \let\next@=\afterVECTOR@
- \fi\fi\fi\fi\fi\fi\fi\fi \next@}
- \xydef@\CORNER@ii{\xy@@{\let\nextii@=\eat@}%
- \VECTORempty@false \xyFN@\CORNER@i}
- \xydef@\VECTOR@other{%
- \addLT@\ifx \next
- \addGT@{\addLT@\DN@##1}{%
- \xy@{<##1>}{\vfromabsolute@{##1}}\VECTORempty@false\afterVECTOR@}%
- \else\ifx (\next
- \DN@(##1){%
- \xy@{(##1)}{\vfromcartesian@{##1}}\VECTORempty@false\afterVECTOR@}%
- \else\ifx /\next
- \DN@/##1/{\xy@{/##1/}{\vfromslide@{##1}}%
- \VECTORempty@false\afterVECTOR@}%
- \else\ifx 0\next
- \DN@ 0{\xy@{0}{\Xc=\z@ \Yc=\z@}\VECTORempty@false\afterVECTOR@}%
- \else
- \DN@{\VECTORempty@true\afterVECTOR@}%
- \fi\fi\fi\fi \next@}
- \xydef@\xyCOORD@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\COORD@}%
- \else \ifcat A\noexpand\next \let\next@=\xyCOORD@letter
- \else \let\next@=\xyCOORD@other \fi\fi \next@}
- \xylet@\COORD@=\xyCOORD@
- \xydef@\xyCOORD@letter{%
- \ifx c\next
- \DN@ c{\xy@{c}{}\afterCOORD@}%
- \else\ifx p\next
- \DN@ p{\xy@{p}\cfromp@ \afterCOORD@}%
- \else\ifx x\next
- \DN@ x{\xy@{x}{\Rc=\Xxbase \Uc=\Yxbase \intersect@}\afterCOORD@}%
- \else\ifx y\next
- \DN@ y{\xy@{y}{\Rc=\Xybase \Uc=\Yybase \intersect@}\afterCOORD@}%
- \else\ifx s\next
- \DN@ s##1{\xy@{s{##1}}{\cfroms@{##1}}\afterCOORD@}%
- \else \let\next@=\afterCOORD@ \fi\fi\fi\fi\fi \next@}
- \xydef@\xyCOORD@other{%
- \ifx "\next
- \DN@"##1"{\xy@{"##1"}{\cfromid@{##1}}\afterCOORD@}%
- \else\ifx \bgroup\next
- \DN@##1{\xy@{{##1}}{\enter@{\pfromthep@\basefromthebase@}}%
- \POS##1\relax \xy@@\leave@ \afterCOORD@}%
- \else \let\next@=\afterCOORD@ \fi\fi \next@}
- \xydef@\xyPOS@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\POS@}%
- \else\addPLUS@\ifx \next
- \addPLUS@\DN@{\xy@+{\enter@\cplusthec@}%
- \afterCOORD{\xy@@\leave@ \xyFN@\POS@}}%
- \else\addDASH@\ifx \next
- \addDASH@\DN@{\xy@-{\enter@\cplusthec@}%
- \afterCOORD{\xy@@{\Xc=-\Xc \Yc=-\Yc\leave@}\xyFN@\POS@}}%
- \else\ifx !\next
- \DN@ !{\xy@!{\enter@\cskewthec@}\afterCOORD{\xy@@\leave@ \xyFN@\POS@}}%
- \else\addDOT@\ifx \next
- \addDOT@\DN@{\xy@.{\enter@\cmergethec@}%
- \afterCOORD{\xy@@\leave@ \xyFN@\POS@}}%
- \else\ifx ,\next
- \DN@ ,{\xy@,{}\afterCOORD{\xyFN@\POS@}}%
- \else\ifx ;\next
- \DN@ ;{\xy@;{\swap@}\afterCOORD{\xyFN@\POS@}}%
- \else\ifx :\next
- \DN@ :{\xyFN@\oneortwocolons@}%
- \else\addEQ@\ifx \next
- \addEQ@\DN@{\xyFN@\saveid@}%
- \else\ifx *\next
- \DN@ *{\xyFN@\oneortwostars@}%
- \else \ifx ?\next
- \DN@?{\xy@?{}\afterPLACE{\xyFN@\POS@}}%
- \else \addAT@\ifx \next
- \addAT@\DN@{\xyFN@\STACK@}%
- \else
- \let\next@=\afterPOS@
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
- \xylet@\POS@=\xyPOS@
- \xydef@\oneortwocolons@{\DNii@{\afterCOORD{\xyFN@\POS@}}%
- \ifx :\next \xy@{::}{\setbase@@\Xc\Yc}\DN@:{\nextii@}%
- \else \xy@:{\setbase@\Xp\Yp\Xc\Yc}\let\next@=\nextii@ \fi
- \next@}
- \xydef@\oneortwostars@{%
- \ifx *\next
- \DN@*##1##{\nextii@{##1}}%
- \DNii@##1##2{\xy@@ix@{{##1}{##2}}%
- \xy@{**##1{##2}}{\expandafter\connect@\the\toks9}\xyFN@\POS@}%
- \else
- \DN@##1##{\nextii@{##1}}%
- \DNii@##1##2{\xy@@ix@{{##1}{##2}}%
- \xy@{*##1{##2}}{\expandafter\drop@\the\toks9}\xyFN@\POS@}%
- \fi
- \next@}
- \xydef@\cfromp@{\Xc=\Xp \Yc=\Yp \Uc=\Up \Dc=\Dp \Lc=\Lp \Rc=\Rp
- \Edgec=\expandafter{\the\Edgep}}
- \xydef@\pfromc@{\Xp=\Xc \Yp=\Yc \Up=\Uc \Dp=\Dc \Lp=\Lc \Rp=\Rc
- \Edgep=\expandafter{\the\Edgec}}
- \xydef@\swapdimen@#1#2{\dimen@=#1\relax #1=#2\relax #2=\dimen@}
- \xydef@\swap@{\swapdimen@\Xc\Xp \swapdimen@\Yc\Yp
- \swapdimen@\Uc\Up \swapdimen@\Dc\Dp \swapdimen@\Lc\Lp \swapdimen@\Rc\Rp
- \toks@=\Edgec \Edgec=\Edgep \Edgep=\toks@}
- \xydef@\vfromabsolute@#1{\vfromabsolute@@#1,@}
- \xydef@\vfromabsolute@@#1,#2@{\Xc=#1\relax
- \DN@{#2}\ifx\next@\empty \Yc=\Xc
- \else \DN@##1,{\Yc=##1}\next@#2\relax \fi}
- \xydef@\cfromthec@{\Xc=\the\Xc \Yc=\the\Yc
- \Uc=\the\Uc \Dc=\the\Dc \Lc=\the\Lc \Rc=\the\Rc
- \Edgec={\expandafter\noexpand\the\Edgec}}
- \xydef@\cfromthep@{\Xc=\the\Xp \Yc=\the\Yp
- \Uc=\the\Up \Dc=\the\Dp \Lc=\the\Lp \Rc=\the\Rp
- \Edgec={\expandafter\noexpand\the\Edgep}}
- \xydef@\pfromthep@{\Xp=\the\Xp \Yp=\the\Yp
- \Up=\the\Up \Dp=\the\Dp \Lp=\the\Lp \Rp=\the\Rp
- \Edgep={\expandafter\noexpand\the\Edgep}}
- \xydef@\pfromthec@{\Xp=\the\Xc \Yp=\the\Yc
- \Up=\the\Uc \Dp=\the\Dc \Lp=\the\Lc \Rp=\the\Rc
- \Edgep={\expandafter\noexpand\the\Edgec}}
- \xydef@\cplusthec@{\advance\Xc\the\Xc \advance\Yc\the\Yc}
- \xydef@\cskewthec@{%
- \noexpand\cskew@{\the\Yc}{\the\Xc}{\the\Dc}{\the\Uc}{\the\Lc}{\the\Rc}}
- \xydef@\cskew@#1#2#3#4#5#6{%
- \Dc=#3\advance\Dc \Yc \ifdim\Dc<\z@ \Dc=\z@ \fi
- \Uc=#4\advance\Uc-\Yc \ifdim\Uc<\z@ \Uc=\z@ \fi
- \advance\Yc#1%
- \Lc=#5\advance\Lc \Xc \ifdim\Lc<\z@ \Lc=\z@ \fi
- \Rc=#6\advance\Rc-\Xc \ifdim\Rc<\z@ \Rc=\z@ \fi
- \advance\Xc#2%
- \Edgec={\rectangleEdge}}
- \xydef@\cmergethec@{%
- \noexpand\cmerge@{\the\Yc}{\the\Xc}{\the\Dc}{\the\Uc}{\the\Lc}{\the\Rc}}
- \xydef@\cmerge@#1#2#3#4#5#6{\the\Edgec4%
- \A@=#2\advance\A@-\Xc \B@=#1\advance\B@-\Yc
- \dimen@=#5\advance\Lc \A@ \ifdim\Lc<\dimen@ \Lc=\dimen@ \fi
- \dimen@=#6\advance\Rc-\A@ \ifdim\Rc<\dimen@ \Rc=\dimen@ \fi
- \dimen@=#3\advance\Dc \B@ \ifdim\Dc<\dimen@ \Dc=\dimen@ \fi
- \dimen@=#4\advance\Uc-\B@ \ifdim\Uc<\dimen@ \Uc=\dimen@ \fi
- \advance\Xc\A@ \advance\Yc\B@}
- \xydef@\halfroottwo{.70710678}
- \xydef@\halfrootthree{.8660254}
- \xydef@\vfromcartesian@#1{\vfromcartesian@@#1@}
- \xydef@\vfromcartesian@@#1,#2@{%
- \Xc=\Xorigin \advance\Xc#1\Xxbase \advance\Xc#2\Xybase
- \Yc=\Yorigin \advance\Yc#1\Yxbase \advance\Yc#2\Yybase}
- \xydef@\setbase@#1#2#3#4{%
- \Xorigin=#1\relax \Yorigin=#2\relax
- \Xxbase=#3\relax \advance\Xxbase-\Xorigin
- \Yxbase=#4\relax \advance\Yxbase-\Yorigin
- \Xybase=-\Yxbase \Yybase=\Xxbase}
- \xydef@\setbase@@#1#2{%
- \Xybase=#1\relax \advance\Xybase-\Xorigin
- \Yybase=#2\relax \advance\Yybase-\Yorigin}
- \xydef@\basefromthebase@{\Xorigin=\the\Xorigin \Yorigin=\the\Yorigin
- \Xxbase=\the\Xxbase \Yxbase=\the\Yxbase
- \Xybase=\the\Xybase \Yybase=\the\Yybase}
- \xydef@\vfromcartesianangle@#1{\enter@\basefromthebase@ \R@=#1\p@
- \B@=360\p@
- \loop@ \ifdim\R@<\z@ \advance\R@\B@ \repeat@
- \loop@ \ifdim\R@>\B@ \advance\R@-\B@ \repeat@
- \ifdim\R@<.5\B@\else \R@=-\R@ \advance\R@\B@
- \Xybase=-\Xybase \Yybase=-\Yybase \fi
- \B@=180\p@
- \ifdim\R@<.5\B@\else \R@=-\R@ \advance\R@\B@
- \Xxbase=-\Xxbase \Yxbase=-\Yxbase \fi
- \B@=90\p@
- \ifdim\R@<.5\B@ \let\nextiii@=\literal@
- \else \R@=-\R@ \advance\R@\B@ \def\nextiii@##1,##2@{##2,##1@}\fi
- \dimen@=\z@ \DN@{1,0@}%
- \dimen@ii=45\p@ \DNii@{.70710678,.70710678@}%
- \chooseangleinterval@
- {\chooseangleinterval@
- {\chooseangleinterval@
- {\chooseangleinterval@
- {\chooseangleinterval@
- {}%
- {4.090909}{.99677570,.08023846@}%
- {}}%
- {6}{.99677570,.08023846@}%
- {\chooseangleinterval@
- {}%
- {8.181818}{.98982144,.14231484@}%
- {}}}%
- {10}{.98480775,.17364818@}%
- {\chooseangleinterval@
- {}%
- {12.857143}{.97492791,.22252093@}%
- {}}}%
- {15}{.96592583,.25881905@}%
- {\chooseangleinterval@
- {\chooseangleinterval@
- {}%
- {16.363636}{.95949297,.28173256@}%
- {}}%
- {18}{.95105652,.30901699@}%
- {\chooseangleinterval@
- {}%
- {20}{.93969262,.34202014@}%
- {}}}}%
- {22.5}{.92387953,.38268343@}%
- {\chooseangleinterval@
- {\chooseangleinterval@
- {\chooseangleinterval@
- {}%
- {24.545455}{.90963200,.41541501@}%
- {}}%
- {25.714286}{.90096887,.43388374@}%
- {}}%
- {30}{.86602540,.5@}%
- {\chooseangleinterval@
- {\chooseangleinterval@
- {}%
- {32.727273}{.84125353,.54064082@}%
- {}}%
- {36}{.80901699,.58778525@}%
- {\chooseangleinterval@
- {\chooseangleinterval@
- {}%
- {38.571429}{.78183148,.62348980@}%
- {}}%
- {40.909091}{.75574957,.65486073@}%
- {\chooseangleinterval@
- {}%
- {40}{.76604444,.64278761@}%
- {}}}}}%
- \A@=\R@ \advance\A@-\dimen@
- \ifdim\ifdim\A@<\z@-\fi\A@<.01\p@ \edef\next@{\expandafter\nextiii@\next@}%
- \else \B@=\dimen@ii \advance\B@-\R@
- \ifdim\A@<\B@ \dimen@=\toradians@\A@
- \edef\next@{\next@ \expandafter\removePT@\the\dimen@ @}%
- \else \dimen@=-\toradians@\B@
- \edef\next@{\nextii@ \expandafter\removePT@\the\dimen@ @}%
- \fi
- \expandafter\interpolatepoint@\next@
- \edef\next@{\expandafter\nextiii@\next@}%
- \fi
- \expandafter\vfromcartesian@@\next@
- \leave@}
- \xydef@\chooseangleinterval@#1#2#3#4{%
- \B@=#2\p@ \def\next{#3}%
- \ifdim\R@<\B@ \dimen@ii=\B@ \let\nextii@=\next #1%
- \else \dimen@=\B@ \let\next@=\next \ifdim\B@<\R@ #4\fi\fi}
- \xydef@\interpolateinterval@#1,#2@#3,#4@{%
- \A@=#1\p@ \dimen@=#3\p@ \advance\dimen@-\A@ \advance\A@\next\dimen@
- \B@=#2\p@ \dimen@=#4\p@ \advance\dimen@-\B@ \advance\B@\next\dimen@
- \edef\next@{\expandafter\removePT@\the\A@,\expandafter\removePT@\the\B@ @}}
- \xydef@\toradians@{0.01745329}
- \xydef@\interpolatepoint@#1,#2@#3@{%
- \A@=#1\p@ \dimen@ii=#3\A@ \dimen@ii=-.5\dimen@ii \advance\A@#3\dimen@ii
- \dimen@=-#2\p@ \advance\A@#3\dimen@
- \B@=#2\p@ \dimen@ii=#3\B@ \dimen@ii=-.5\dimen@ii \advance\B@#3\dimen@ii
- \dimen@=#1\p@ \advance\B@#3\dimen@
- \edef\next@{\expandafter\removePT@\the\A@,\expandafter\removePT@\the\B@ @}}
- \xydef@\drop@#1#2{%
- \global\setbox\lastobjectbox@=\object#1{#2}%
- \ifHidden@ \dimen@=\Xc \advance\dimen@-\Lc \else
- \dimen@=\Yc \advance\dimen@ \Uc \ifdim\Ymax<\dimen@ \Ymax=\dimen@ \fi
- \dimen@=\Yc \advance\dimen@-\Dc \ifdim\dimen@<\Ymin \Ymin=\dimen@ \fi
- \dimen@=\Xc \advance\dimen@ \Rc \ifdim\Xmax<\dimen@ \Xmax=\dimen@ \fi
- \dimen@=\Xc \advance\dimen@-\Lc \ifdim\dimen@<\Xmin \Xmin=\dimen@ \fi \fi
- \ifInvisible@\else
- \setboxz@h{\kern\dimen@ \raise\Yc\box\lastobjectbox@}%
- \ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ {\Drop@@}\fi}
- \xydef@\connect@#1#2{\setupDirection@ \enter@{\cfromthec@}%
- \global\setbox\lastobjectbox@=\object#1{#2}\leave@
- \Connect@@}
- \xydef@\afterPLACE#1{%
- \DN@##1{\def\afterPLACE@{\xy@@\leave@ \def\afterPLACE@{##1}#1}}%
- \expandafter\next@\expandafter{\afterPLACE@}%
- \xy@@{\enter@{\pfromthep@}%
- \Creset@@
- \def\PLACEf@{{.5}}%
- \let\PLACEedgep@@=\PLACEedgep@ \let\PLACEedgec@@=\PLACEedgec@}%
- \xyFN@\PLACE@}
- \xydef@\PLACEf@{}
- \xydef@\PLACEedgep@@{}
- \xydef@\PLACEedgec@@{}
- \xydef@\PLACEedgep@{\Cshavep@@ \def\PLACEedgep@@{\Cslidep@@\jot}}
- \xydef@\PLACEedgec@{\Cshavec@@ \def\PLACEedgec@@{\Cslidec@@{-\jot}}}
- \xylet@\afterPLACE@=\empty
- \xydef@\PLACE@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@}%
- \else\addLT@\ifx \next
- \addLT@\DN@{\addLT@\xy@{\def\PLACEf@{{0}}\PLACEedgep@@}\xyFN@\PLACE@}%
- \else\addGT@\ifx \next
- \addGT@\DN@{\addGT@\xy@{\def\PLACEf@{{1}}\PLACEedgec@@}\xyFN@\PLACE@}%
- \else\ifx (\next
- \DN@(##1){\def\PLACEf@{{##1}}\xy@{(##1)}{\def\PLACEf@{{##1}}}\xyFN@\PLACE@}%
- \else
- \DN@{\xy@@{\expandafter\Calong@@\PLACEf@ \czeroEdge@}\PLACE@@}%
- \fi\fi\fi\fi \next@}
- \xydef@\PLACE@@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\PLACE@@}%
- \else\ifx /\next \DN@/##1/{\xy@{/##1/}{\Cslidec@@{##1}}\afterPLACE@}%
- \else \let\next@=\afterPLACE@
- \fi\fi \next@}
- \xydef@\intersect@{%
- \dX=\Xc \advance\dX-\Xp \dY=\Yc \advance\dY-\Yp
- \A@=\Xc \advance\A@-\Xorigin \B@=\Yc \advance\B@-\Yorigin
- \edef\next@{\expandafter\removePT@\the\Rc}%
- \edef\nextii@{\expandafter\removePT@\the\Uc}%
- \Dc=\next@\dY \advance\Dc-\nextii@\dX \divide\Dc\KK@
- \Lc=\next@\B@ \advance\Lc-\nextii@\A@ \divide\Lc\KK@
- \ifdim\Dc=\z@\DN@{0}\else \quotient@\next@\Lc\Dc \fi
- \advance\Xc-\next@\dX \advance\Yc-\next@\dY
- \czeroEdge@}
- \xydef@\vfromslide@#1{\enter@\DirectionfromtheDirection@ \begingroup
- \plainxy@\afterDIRECTIONorEMPTY\vfromslide@i\vfromslide@i#1@}
- \xydef@\vfromslide@i#1@{%
- \edef\next{\endgroup
- \dimen@=#1\relax \Xc=\cosDirection\dimen@ \Yc=\sinDirection\dimen@}\next
- \leave@}
- \xydef@\sbot@{-1}
- \xydef@\stop@{-1}
- \xydef@\cfroms@#1{%
- \count@=\stop@ \advance\count@-#1\relax
- \DN@{\count@=\stop@ \advance\count@-\sbot@
- \xyerror@{stack index out of range (should be 0..\the\count@)}{}}%
- \ifnum\count@>\sbot@ \ifnum\count@>\stop@\else \let\next@=\relax \fi\fi
- \csname S@\the\count@\endcsname}
- \xydef@\STACK@{%
- \addPLUS@\ifx\next
- \addPLUS@\DN@{\xy@{@+}{}\afterCOORD{\xy@@\spushc@ \xyFN@\POS@}}%
- \else\addDASH@\ifx\next
- \addDASH@\DN@{\xy@{@-}{}\afterCOORD{\xy@@\spop@ \xyFN@\POS@}}%
- \else \ifx i\next \DN@ i{\xy@{@i}\sinit@ \xyFN@\POS@}%
- \else \ifx (\next \DN@ ({\xy@{@(}\senter@ \xyFN@\POS@}%
- \else \ifx )\next \DN@ ){\xy@{@)}\sleave@ \xyFN@\POS@}%
- \else\addAT@\ifx\next \addAT@\DN@{\xy@{@@}{}\smap@}%
- \else \DN@##1{\xyerror@{illegal stack command ##1}{}\afterCOORD{\xyFN@\POS@}}%
- \fi\fi\fi\fi\fi\fi \next@}
- \xydef@\spushc@{%
- \count@=\stop@ \advance\count@\@ne \edef\stop@{\the\count@}%
- \expandafter\edef\csname S@\stop@\endcsname{\cfromthec@}}
- \xydef@\spop@{\count@=\stop@
- \ifnum\count@>\sbot@ \advance\count@\m@ne \edef\stop@{\the\count@}%
- \else \xyerror@{nothing to pop from stack}{}\fi}
- \xydef@\sinit@{\edef\stop@{\sbot@}}
- \xydef@\senter@{%
- \count@=\stop@ \advance\count@\@ne
- \expandafter\edef\csname S@\the\count@\endcsname{\sbot@}%
- \edef\sbot@{\the\count@}\edef\stop@{\the\count@}}
- \xydef@\sleave@{%
- \ifnum\sbot@=\stop@\else
- \xywarning@{leaving non-empty stack}\edef\stop@{\sbot@}\fi
- \ifnum\sbot@>\m@ne \edef\sbot@{\csname S@\stop@\endcsname}%
- \count@=\stop@ \advance\count@\m@ne \edef\stop@{\the\count@}%
- \edef\sbot{\the\count@}\fi}
- \xydef@\sempty@{\ifnum\stop@=\sbot@ TT\else TF\fi}
- \xydef@\xytotoks@#1#2{\addtotoks@{#2}}
- \xydef@\xytotoks@@toksix@#1{\addtotoks@{\toks9={#1}}}
- \xydef@\smap@{%
- \begingroup \toks@={}\let\xy@=\xytotoks@ \let\oxy@=\xy@
- \let\xy@@ix@=\xytotoks@@toksix@
- \afterCOORD{\expandafter\endgroup
- \expandafter\smapxy@@\expandafter{\the\toks@}\xyFN@\POS@}}
- \xydef@\smapxy@@#1{\xy@@{\edef\smapp@@{\sbot@}\smapxy@i{#1}}}
- \xylet@\smapp@@=\empty
- \xydef@\smapxy@i#1{%
- \ifnum\smapp@@<\stop@
- \count@=\smapp@@ \advance\count@\@ne \edef\smapp@@{\the\count@}%
- \DN@{\csname S@\smapp@@\endcsname #1\relax \smapxy@i{#1}}%
- \else \let\next@=\relax
- \fi \next@}
- \xydef@\saveid@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\saveid@}%
- \else \ifx "\next\DN@"##1"{\xy@{="##1"}{\idfromc@{##1}}\xyFN@\POS@}%
- \else \ifx :\next\DN@:##1"##2"{\xy@{=:"##2"}{\idfrombase@{##2}}\xyFN@\POS@}%
- \else \let\next@=\saveid@COORD
- \fi\fi\fi \next@}
- \xydef@\xyscope@{}
- \xydef@\xyprefix@@{}
- \xydef@\idfromc@#1{\DN@{#1}%
- \expandafter\edef\csname Q@\codeof\next@\endcsname{\cfromthec@}}
- \xydef@\idfrombase@#1{\DN@{#1}%
- \expandafter\edef\csname Q@\codeof\next@\endcsname{\basefromthebase@}}
- \xydef@\saveid@COORD{%
- \begingroup \toks@={}\let\xy@=\xytotoks@ \let\oxy@=\xy@
- \let\xy@@ix@=\xytotoks@@toksix@
- \afterCOORD{\expandafter\saveid@COORDi\expandafter{\the\toks@}}}
- \xydef@\saveid@COORDi#1#2"#3"{\endgroup \xy@@{\idfromxy@{#3}{#1}}\xyFN@\POS@}
- \xydef@\idfromxy@#1#2{\DN@{#1}%
- \expandafter\def\csname Q@\codeof\next@\endcsname{#2}}
- \xydef@\cfromid@#1{\DNii@{#1}\edef\nextii@{\codeof\nextii@}%
- \expandafter\let\expandafter\next@\csname Q@\nextii@\endcsname
- \ifx\next@\relax
- \xyerror@{<pos> \string"\nextii@\string" not defined}{}%
- \else \expandafter\next@\fi}
- \message{objects,}
- \xydef@\OBJECT@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\OBJECT@}%
- \else\ifcat A\noexpand\next \let\next@=\OBJECT@letter
- \else \let\next@=\OBJECT@other \fi\fi \next@}
- \xydef@\OBJECT@letter{%
- \ifx i\next
- \DN@ i{\addtotoks@\Invisible@true \xyFN@\OBJECT@}%
- \else\ifx h\next
- \DN@ h{\addtotoks@\Hidden@true \xyFN@\OBJECT@}%
- \else\ifx o\next \DN@ o{\xywarning@{o modifier used}\OBJECT@shape{o}}%
- \else\ifx x\next \DN@ x{\xywarning@{x modifier used}\OBJECT@shape{}}%
- \else \let\next@=\OBJECT@direction
- \fi\fi\fi\fi \next@}
- \xydef@\OBJECT@other{%
- \ifx !\next \DN@!{\OBJECT@shift}%
- \else\addPLUS@\ifx \next \DN@{\OBJECT@change+>}%
- \else\addDASH@\ifx \next \DN@{\OBJECT@change-<}%
- \else\addEQ@\ifx \next \DN@{\OBJECT@set}%
- \else\ifx [\next
- \DN@[##1]{\xy@{[##1]}{\OBJECT@shape{##1}}}%
- \else\ifx ^\next \let\next@=\OBJECT@direction
- \else\ifx _\next \let\next@=\OBJECT@direction
- \else\ifx :\next \let\next@=\OBJECT@direction
- \else\ifx ?\next
- \DN@ ?{\xywarning@{\string? modifier used}\xyFN@\OBJECT@direction}%
- \else \DN@##1##{\OBJECT@@{##1}}%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi \next@}
- \xydef@\addDirectiontotoks@{\edef\nextiii@{{\DirectionfromtheDirection@}}%
- \expandafter\addtotoks@\nextiii@}
- \xydef@\OBJECT@@#1#2{\Edgec={\objectEdge}%
- \Invisible@false\Hidden@false \def\Leftness@{.5}\def\Upness@{.5}%
- \def\Drop@@{\boxz@}\def\Connect@@{\straight@\relax}%
- \DN@{#1}\ifx\next@\empty \DNii@{#2}%
- \ifx\nextii@\empty \DN@{\hbox\bgroup\no@}\else \let\next@=\objectbox \fi\fi
- \setbox\z@=\next@{#2}\Lc=\Leftness@\wdz@ \Rc=\wdz@ \advance\Rc-\Lc
- \Dc=\dp\z@ \advance\Dc\ht\z@ \Uc=\Upness@\Dc \advance\Dc-\Uc
- \Rp=\z@ \Lp=\Lc \Up=\Uc \advance\Up-\ht\z@ \Dp=-\Up
- \the\toks@\toks@={}\setboxz@h{\kern\Rp \raise\Up\boxz@}%
- \ifdim\Rc=\z@ \ifdim\Uc=\z@ \ifdim\Lc=\z@ \ifdim\Dc=\z@
- \Edgec={\zeroEdge}\fi\fi\fi\fi
- \dimen@=\Lc \advance\dimen@\Rc \wdz@=\dimen@ \ht\z@=\Uc \dp\z@=\Dc \boxz@
- \OBJECT@x}
- \xydef@\adjustLR@{%
- \ifdim\wdz@=\z@ \Lc=\z@ \Rc=\z@ \dimen@=\Leftness@\p@
- \ifdim\dimen@<\z@ \Lc=\dimen@ \Rc=-\Lc
- \else\ifdim\dimen@>\p@ \Lc=\dimen@ \advance\Lc-\p@ \Rc=-\Lc \fi\fi
- \else \Lc=\Leftness@\wdz@ \Rc=\wdz@ \advance\Rc-\Lc \fi }
- \xydef@\adjustUD@{\dimen@=\ht\z@ \advance\dimen@\dp\z@
- \ifdim\dimen@=\z@ \Uc=\z@ \Dc=\z@ \dimen@=\Upness@\p@
- \ifdim\dimen@<\z@ \Uc=\dimen@ \Dc=-\Lc
- \else\ifdim\dimen@>\p@ \Uc=\dimen@ \advance\Uc-\p@ \Dc=-\Lc \fi\fi
- \else \Dc=\dimen@ \Uc=\Upness@\dimen@ \advance\Dc-\Uc \fi }
- \xydef@\OBJECT@x{\toks@={\egroup\def\Drop@@}%
- \expandafter\addtotoks@\expandafter{\expandafter{\Drop@@}\def\Connect@@}%
- \expandafter\addtotoks@\expandafter{\expandafter{\Connect@@}}%
- \edef\tmp@{\Dc=\the\Dc \Uc=\the\Uc \Lc=\the\Lc \Rc=\the\Rc
- \Edgec={\expandafter\noexpand\the\Edgec}%
- \ifInvisible@\noexpand\Invisible@true\else\noexpand\Invisible@false\fi
- \ifHidden@\noexpand\Hidden@true\else\noexpand\Hidden@false\fi
- \def\noexpand\Leftness@{\Leftness@}\def\noexpand\Upness@{\Upness@}}%
- \expandafter\addtotoks@\expandafter{\tmp@}\the\toks@}
- \xynew@{if}\ifInvisible@
- \xynew@{if}\ifHidden@
- \xydef@\Leftness@{}
- \xydef@\Upness@{}
- \xydef@\Drop@@{\boxz@}
- \xydef@\Connect@@{}
- \xydef@\objectbox#1{\hbox{$\m@th\objectstyle{#1}$}}
- \xylet@\objectstyle=\textstyle
- \xydef@\object{\hbox\bgroup\object@}
- \xydef@\object@{%
- \edef\next@{={\DirectionfromtheDirection@}}\expandafter\toks@\next@
- \plainxy@ \xyFN@\OBJECT@}
- \xydef@\composite#1#{\hbox\bgroup\composite@{#1}}
- \xydef@\composite@#1#2{%
- \DN@{#1}\ifx\next@\empty\else\xywarning@{no variants of
- \string\composite\space allowed}\fi
- \global\setbox9=\hbox\bgroup
- \Dp=-\maxdimen \Up=-\maxdimen \Lp=-\maxdimen \Rp=-\maxdimen
- \xyFN@\composite@i#2@}
- \xydef@\composite@i{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\composite@i}%
- \else\ifx *\next \DN@ *{\xyFN@\composite@i}%
- \else\ifx @\next \DN@ @{\composite@x}%
- \xyerror@{<composite> object expected}{}\czeroEdge@
- \else \DN@{\composite@ii}\fi\fi\fi \next@}
- \xydef@\composite@ii#1#{\composite@iii{#1}}
- \xydef@\composite@iii#1#2{%
- \setbox\z@=\object#1{#2}%
- \ifInvisible@ \setboxz@h{}%
- \else \setboxz@h{\kern-\Lc \boxz@}\ht\z@=\z@ \dp\z@=\z@ \wd\z@=\z@ {\Drop@@}\fi
- \ifHidden@\else
- \ifdim\Up<\Uc \Up=\Uc \fi \ifdim\Dp<\Dc \Dp=\Dc \fi
- \ifdim\Rp<\Rc \Rp=\Rc \fi \ifdim\Lp<\Lc \Lp=\Lc \fi
- \fi
- \xyFN@\composite@iv}
- \xydef@\composite@iv{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\composite@iv}%
- \else \ifx @\next \DN@ @{\composite@x}%
- \else \let\next@=\composite@i \fi\fi \next@}
- \xydef@\composite@x{%
- \edef\tmp@{\egroup \Dc=\the\Dp \Uc=\the\Up \Lc=\the\Lp \Rc=\the\Rp}\tmp@
- \setboxz@h{\kern\Lc\box9}\ht\z@=\Uc \dp\z@=\Dc
- \dimen@=\Lc \advance\dimen@\Rc \wdz@=\dimen@
- \Edgec={\rectangleEdge}\computeLeftUpness@ \boxz@
- \OBJECT@x}
- \xydef@\computeLeftUpness@{%
- \dimen@=\Lc \advance\dimen@\Rc
- \ifdim\dimen@=\z@ \def\Connect@@{\straight@{\dottedSpread@\jot}}%
- \ifdim\Lc=\z@\else
- \DN@{\zeroEdge}\expandafter\DNii@\expandafter{\the\Edgec}%
- \ifx\next@\nextii@\Edgec={\rectangleEdge}\fi\fi
- \else \quotient@\Leftness@\Lc\dimen@ \fi
- \dimen@=\Uc \advance\dimen@\Dc
- \ifdim\dimen@=\z@ \def\Connect@@{\straight@{\dottedSpread@\jot}}%
- \ifdim\Uc=\z@\else
- \DN@{\zeroEdge}\expandafter\DNii@\expandafter{\the\Edgec}%
- \ifx\next@\nextii@\Edgec={\rectangleEdge}\fi\fi
- \else \quotient@\Upness@\Uc\dimen@ \fi}
- \xydef@\xybox#1{\xy#1\endxy \Edgec={\rectangleEdge}\computeLeftUpness@}
- \xydef@\OBJECT@shift{%
- \let\xy@=\xytotoks@ \afterVECTORorEMPTY
- {\OBJECT@shift@}%
- {\addtotoks@{\Xc=-\Lc \advance\Xc\Rp \advance\Xc\Lp \Yc=\Up}\OBJECT@shift@}}
- \xydef@\OBJECT@shift@{%
- \addtotoks@{\advance\Up-\Yc
- \advance\Lc\Xc \advance\Rc-\Xc \advance\Dc\Yc \advance\Uc-\Yc
- \computeLeftUpness@}%
- \let\xy@=\oxy@
- \xyFN@\OBJECT@}
- \xylet@\objectmargin@=\jot
- \xylet@\objectwidth@=\z@
- \xylet@\objectheight@=\z@
- \xydef@\objectmargin{\afterADDOP{\Addop@@\objectmargin@}}
- \xydef@\objectwidth{\afterADDOP{\Addop@@\objectwidth@}}
- \xydef@\objectheight{\afterADDOP{\Addop@@\objectheight@}}
- \xydef@\OBJECT@change#1#2{%
- \afterADDOP{%
- \addEQ@\ifx \next
- \addtotoks@{\Xc=\Dc \advance\Xc\Uc \Yc=\Lc \advance\Yc\Rc}%
- \else
- \addtotoks@{\Xc=\objectmargin@ \advance\Xc\Xc \Yc=\Xc}%
- \fi
- \let\xy@=\xytotoks@
- \afterVECTORorEMPTY{\OBJECT@change@#1#2}{\OBJECT@change@#1#2}}}
- \xydef@\OBJECT@set{%
- \afterADDOP{%
- \let\xy@=\xytotoks@ \afterVECTORorEMPTY
- {\OBJECT@change@+=}%
- {\addtotoks@{\Xc=\objectwidth@ \Yc=\objectheight@}\OBJECT@change@+=}}}
- \xydef@\OBJECT@change@#1#2{%
- \addtotoks@{\advance\Rc\Lc \advance\Rp-\Lc \let\tmp@=\Rc}%
- \expandafter\addtotoks@\expandafter{\Addop@@\tmp@{#1\Xc}\Rc=\tmp@
- \Lc=\Leftness@\Rc \advance\Rp\Lc \advance\Rc-\Lc}%
- \addtotoks@{\advance\Dc\Uc \let\tmp@=\Dc}%
- \expandafter\addtotoks@\expandafter{\Addop@@\tmp@{#1\Yc}\Dc=\tmp@
- \Uc=\Upness@\Dc \advance\Dc-\Uc}%
- \let\xy@=\oxy@ \xyFN@\OBJECT@}
- \xydef@\afterADDOP#1{\def\afterADDOP@{#1}\xyFN@\ADDOP@}
- \xylet@\afterADDOP@=\empty
- \xydef@\ADDOP@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\ADDOP@}%
- \else\addPLUS@\ifx \next \addPLUS@\DN@{\xyFN@\ADDOP@plus}%
- \else\addDASH@\ifx \next \addDASH@\DN@{\xyFN@\ADDOP@minus}%
- \else\addEQ@\ifx \next
- \addEQ@\DN@{\def\Addop@@{\Addop@0+=}\afterADDOP@}%
- \else
- \DN@{\def\Addop@@{\Addop@0+=}\afterADDOP@}%
- \fi\fi\fi\fi \next@}
- \xydef@\ADDOP@plus{%
- \addEQ@\ifx \next
- \addEQ@\DN@{\def\Addop@@{\Addop@0+<}\afterADDOP@}%
- \else
- \DN@{\def\Addop@@{\Addop@1+=}\afterADDOP@}%
- \fi \next@}
- \xydef@\ADDOP@minus{%
- \addEQ@\ifx \next
- \addEQ@\DN@{\def\Addop@@{\Addop@0->}\afterADDOP@}%
- \else
- \DN@{\def\Addop@@{\Addop@1-=}\afterADDOP@}%
- \fi \next@}
- \xydef@\Addop@#1#2#3#4#5{%
- \dimen@=#4\relax \edef#4{\the\dimen@}%
- \dimen@=#1\dimen@ \advance\dimen@#2#5\relax
- \ifdim\dimen@#3#4\else \edef#4{\the\dimen@}\fi
- \ifx\xy@\xyinitial@\else \DN@##1{\xy@@{\edef#4{##1}}}%
- \expandafter\next@\expandafter{#4}\fi}
- \xydef@\objectEdge{\rectangleEdge}
- \xydef@\OBJECT@shape#1{\DN@{*shape@#1@}%
- \expandafter\let\expandafter\next\csname\codeof\next@\endcsname
- \ifx\next\relax \DN@{\OBJECT@shapei[#1]}%
- \else \DN@{\expandafter\addtotoks@\expandafter{\next}\xyFN@\OBJECT@}\fi
- \next@}
- \xydefcsname@{*shape@@}{\the\Edgec4}
- \xydefcsname@{*shape@o@}{\Edgec={\circleEdge}\Lc=\Rc \Uc=\Rc \Dc=\Rc}
- \xydefcsname@{*shape@.@}{\czeroEdge@}
- \xydef@\OBJECT@shapei[#1#2]{\DN@{*shapechar@#1@}%
- \expandafter\let\expandafter\next\csname\codeof\next@\endcsname
- \ifx\next\relax \DN@{[#1#2]}%
- \xywarning@{illegal [<shape>] ignored: \codeof\next@\space not defined}%
- \else \expandafter\addtotoks@\expandafter{\next{#2}}\fi
- \xyFN@\OBJECT@}
- \xydef@\OBJECT@direction{\afterDIRECTIONorEMPTY{%
- \edef\next@{{\DirectionfromtheDirection@}}\expandafter\addtotoks@\next@
- \xyFN@\OBJECT@}%
- {\xyFN@\OBJECT@}}
- \xydef@\afterDIRECTIONorEMPTY#1#2{%
- \DN@##1{\def\afterDIRECTION@{\def\afterDIRECTION@{##1}%
- \ifDIRECTIONempty@\DN@{#2}\else\DN@{#1}\fi \next@}}%
- \expandafter\next@\expandafter{\afterDIRECTION@}%
- \xyFN@\DIRECTION@}
- \xylet@\afterDIRECTION@=\empty
- \xynew@{if}\ifDIRECTIONempty@
- \xydef@\DIRECTION@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\DIRECTION@}%
- \else\ifx v\next \DN@ v{\DIRECTION@v}%
- \else
- \DN@{\count@=8
- \afterDIAG{\ifnum\count@=8 \DN@{\DIRECTIONempty@true \xyFN@\DIRECTION@i}%
- \else \DN@{\xy@@{\dimen@=\xydashl@}\Directionfromdiag@}\fi \next@}}%
- \fi\fi \next@}
- \def\afterDIAG#1{\def\afterDIAG@{#1}\xyFN@\DIAG@}
- \xydef@\DIAG@{%
- \ifx d\next \DN@ d{\count@=1 \xyFN@\DIAG@@}%
- \else\ifx r\next \DN@ r{\count@=3 \xyFN@\DIAG@@}%
- \else\ifx u\next \DN@ u{\count@=5 \xyFN@\DIAG@@}%
- \else\ifx l\next \DN@ l{\count@=7 \xyFN@\DIAG@@}%
- \else \let\next@=\afterDIAG@
- \fi\fi\fi\fi \next@}
- \xydef@\DIAG@@{\ifcase\count@ \or
- \DIAG@@@ l0r2\or\or \DIAG@@@ d2u4\or\or \DIAG@@@ r4l6\or\or \DIAG@@@ u6d0%
- \else\xybug@{impossible <diag> number}\fi
- \next@}
- \xydef@\DIAG@@@#1#2#3#4{%
- \ifx #1\next \count@=#2\DN@#1{\afterDIAG@}%
- \else \ifx #3\next \count@=#4\DN@#3{\afterDIAG@}%
- \else \let\next@=\afterDIAG@ \fi\fi}
- \xydef@\Directionfromdiag@{\ifcase\count@
- \xy@@{\dlDirection@\dimen@}%
- \or \xy@@{\dDirection@\dimen@}%
- \or \xy@@{\drDirection@\dimen@}%
- \or \xy@@{\rDirection@\dimen@}%
- \or \xy@@{\urDirection@\dimen@}%
- \or \xy@@{\uDirection@\dimen@}%
- \or \xy@@{\ulDirection@\dimen@}%
- \or \xy@@{\lDirection@\dimen@}%
- \or
- \else\xybug@{impossible <diag>}\fi
- \DIRECTIONempty@false\xyFN@\DIRECTION@i}
- \xydef@\DIRECTION@v{\begingroup \xy@{v}{\Xorigin=\z@ \Yorigin=\z@}%
- \afterVECTORorEMPTY
- {\xy@@{\Xp=\z@ \Yp=\z@ \setupDirection@}%
- \edef\next@{\noexpand\xy@@\DirectionfromtheDirection@}%
- \expandafter\endgroup\next@ \DIRECTIONempty@false \xyFN@\DIRECTION@i}%
- {\xyerror@{<vector> expected after v}{}\endgroup
- \DIRECTIONempty@false \xyFN@\DIRECTION@i}}
- \xydef@\DIRECTION@i{%
- \ifx ^\next \DN@ ^{\xy@^{\aboveDirection@\xydashl@}%
- \DIRECTIONempty@false \xyFN@\DIRECTION@i}%
- \else\ifx _\next \DN@ _{\xy@_{\belowDirection@\xydashl@}%
- \DIRECTIONempty@false \xyFN@\DIRECTION@i}%
- \else\ifx :\next \DN@ :{\begingroup
- \xy@:{\Xorigin=\z@ \Yorigin=\z@
- \Xxbase=\dX \Yxbase=\dY \Xybase=-\dY \Yybase=\dX}%
- \afterVECTORorEMPTY
- {\xy@@{\Xp=\z@ \Yp=\z@ \setupDirection@}%
- \edef\next@{\noexpand\xy@@\DirectionfromtheDirection@}%
- \expandafter\endgroup\next@ \DIRECTIONempty@false \xyFN@\DIRECTION@i}%
- {\xyerror@{<vector> expected after \string:}{}\endgroup
- \DIRECTIONempty@false \xyFN@\DIRECTION@i}}%
- \else
- \let\next@=\afterDIRECTION@
- \fi\fi\fi \next@}
- \message{decorations;}
- \xydef@\drop#1#{\DN@##1{\xy@@ix@{{#1}{##1}}%
- \xy@{\drop#1{##1}}{\expandafter\drop@\the\toks9}\ignorespaces}\next@}
- \xydef@\connect#1#{\DN@##1{\xy@@ix@{{#1}{##1}}%
- \xy@{\connect#1{##1}}{\expandafter\connect@\the\toks9}\ignorespaces}\next@}
- \xydef@\save{\xy@\save\save@ \POS}
- \xydef@\save@{\enter@{\cfromthec@ \pfromthep@ \basefromthebase@}}
- \xydef@\restore{\xy@\restore\leave@ \ignorespaces}
- \xydef@\xyverbose{\xy@\xyverbose{\let\xy@=\xyverbose@
- \W@{XY: \string\xyverbose\xytracelineno@}}}
- \xydef@\xyverbose@#1#2{%
- {\def\1{#1}\ifx\1\empty\else\W@{XY: \codeof\1\xytracelineno@}\fi}%
- \oxy@{#1}{#2}}
- \xydef@\xytracing{\xy@\xytracing{\let\xy@=\xytracing@
- \W@{XY TRACE: \string\xytracing\xytracelineno@}\xystatus@:}}
- \xydef@\xytracing@#1#2{{\def\1{#1}\def\2{#2}%
- \W@{XY TRACE: \codeof\1 {\codeof\2}\xytracelineno@}}\oxy@{#1}{#2}\xystatus@:}
- \xydef@\xystatus@#1{%
- \W@{#1 c=<\the\Xc,\the\Yc> \expandafter\string\the\Edgec
- \string[\the\Lc+\the\Rc,\the\Dc+\the\Uc\string]}%
- \W@{#1 p=<\the\Xp,\the\Yp> \expandafter\string\the\Edgep
- \string[\the\Lp+\the\Rp,\the\Dp+\the\Up\string]}%
- \W@{#1 [d=<\the\dX,\the\dY>
- Direction=\the\Direction=\string(\cosDirection,\sinDirection\string)]
- S=\the\csp@}%
- \W@{#1 base = <\the\Xorigin,\the\Yorigin> +
- x\string*<\the\Xxbase,\the\Yxbase> +
- y\string*<\the\Xybase,\the\Yybase>}%
- \W@{#1 min/max = <\the\Xmin,\the\Ymin> / <\the\Xmax,\the\Ymax>}}
- \xydef@\xyquiet{\xy@\xyverbose{\let\xy@=\oxy@
- \W@{XY: \string\xyverbose\xytracelineno@}}}
- \xydef@\xyignore#1{\xy@\xyignore{\xyignore@{#1}}\ignorespaces}
- \xydef@\xyignore@#1{{\let\xy@=\xyeat@ \let\oxy@=\xy@ \POS#1\relax}}
- \xydef@\xyeat@#1#2{}
- \xylet@\compilename@@=\empty
- \xylet@\xyrecompile@@=\relax
- \xydef@\xycompileto#1#2{\if\inxy@ \DN@{\xy@@{\nter@{}}}%
- \else \DN@{\xy \xy@@{\nter@\endxy}}\fi \next@
- \ifxysaving@ \xyerror@{Compilations can not be nested}{}\fi
- \DN@{#1}\edef\compilename@@{\codeof\next@}\DNii@{#2}%
- \expandafter\xyinputorelse@\expandafter{\compilename@@.xyc}%
- {\def\xyrecompile@@{compiling new}}%
- \ifx\xyrecompile@@\relax\else \expandafter\xyrecompile@ \fi \xy@@\leave@}
- \xydef@\xyrecompile@{%
- \message{(\xyrecompile@@\space\string`\compilename@@.xyc\string'}%
- \DN@{\immediate\openout\xywrite@=}\expandafter\next@\compilename@@.xyc
- \immediate\write\xywrite@{%
- \string\xycompiled{\compilename@@}%
- {\the\year/\the\month/\the\day\string:\the\time\xytracelineno@}%
- {Xy-pic \xyversion}\xycomment@}%
- \immediate\write\xywrite@{{\codeof\nextii@}\relax}%
- {\xysaving@ \expandafter\POS\nextii@ \relax}%
- \immediate\write\xywrite@{\string\xyendcompiled}%
- \immediate\closeout\xywrite@ \message{done)}%
- \expandafter\input\compilename@@.xyc }
- \xydef@\xysaving@{\let\xy@=\xysave@ \let\oxy@=\xy@
- \let\xy@@ix@=\xysave@@toksix@ \xysaving@true}
- \xynew@{if}\ifxysaving@ \xysaving@false
- \xydef@\xysave@#1#2{{\DN@{\xy@{#1}{#2}}%
- \immediate\write\xywrite@{\codeof\next@\xycomment@}}}
- \xydef@\xysave@@toksix@#1{{\DN@{\xy@@ix@{#1}}%
- \immediate\write\xywrite@{\codeof\next@\relax}}}
- \xywarnifdefined\xycomment@
- {\catcode`\%=12 \catcode`\(=1 \catcode`\)=2 \gdef\xycomment@(%)}
- \xydef@\xycompiled#1#2#3#4{\DN@{#1}\edef\next@{\codeof\next@}%
- \ifx\next@\compilename@@\else
- \xywarning@{This file does not contain the result of
- \string\xycompileto{\compilename@@}{...}^^J%
- but of \string\xycompileto{\next@}}\fi
- \edef\next{Xy-pic \xyversion}\DN@{#3}\ifx\next\next@
- \DN@{#4}\ifx\next@\nextii@ \message{compiled #2}\xycatcodes
- \else \def\xyrecompile@@{source changed - recompiling}\xyendinput \fi
- \else \def\xyrecompile@@{XY-pic version changed - recompiling}\xyendinput \fi}
- \xydef@\xyendcompiled{\let\xyrecompile@@=\relax \xyendinput}
- \message{kernel objects:}
- \message{directionals,}
- \xydef@\dir{\hbox\bgroup\xyFN@\dir@i}
- \xydef@\dir@i{\ifx *\next \DN@*{\object@}\else \let\next@=\dir@ii \fi \next@}
- \xydef@\dir@ii#1#{\dir@{#1}}
- \xydef@\dir@#1#2{\DN@{dir#1{#2}}%
- \expandafter\let\expandafter\next\csname\codeof\next@\endcsname
- \ifx\next\relax \DN@{dir{#2}}%
- \expandafter\let\expandafter\next\csname\codeof\next@\endcsname
- \ifx\next\relax \DN@{\dir#1{#2}}%
- \xyerror@{illegal <dir>: \codeof\next@\space not defined}{}%
- \let\next=\no@ \fi\fi \next}
- \xydefcsname@{dir{}}{\no@}
- \xyletcsnamecsname@{dir0{}}{dir{}}
- \xyletcsnamecsname@{dir1{}}{dir{}}
- \xyletcsnamecsname@{dir^{}}{dir{}}
- \xyletcsnamecsname@{dir_{}}{dir{}}
- \xyletcsnamecsname@{dir2{}}{dir{}}
- \xyletcsnamecsname@{dir3{}}{dir{}}
- \xyletcsnamecsname@{dir{ }}{dir{}}
- \xydef@\no@{\egroup \czeroEdge@ \Invisible@false \Hidden@false
- \def\Leftness@{.5}\def\Upness@{.5}%
- \def\Drop@@{\setbox\z@=\copy\voidb@x}\def\Connect@@{\no@@}}
- \xydefcsname@{dir1{-}}{\line@}
- \xydefcsname@{dir2{-}}{\line@ \double@\xydashh@}
- \xydefcsname@{dir3{-}}{\line@ \triple@\xydashh@}
- \xyletcsnamecsname@{dir0{-}}{dir{}}
- \xyletcsnamecsname@{dir{-}}{dir1{-}}
- \xyletcsnamecsname@{dir{=}}{dir2{-}}
- \xydef@\line@{\dimen@=\sdY\sinDirection\xydashl@
- \ifnum\SemiDirectionChar<31 \Dc=\z@ \Uc=\dimen@ \DN@{\dY<\z@}%
- \else\ifnum\SemiDirectionChar<64 \Dc=\dimen@ \Uc=\z@ \DN@{\z@<\dY}%
- \else\ifnum\SemiDirectionChar<96 \Dc=\dimen@ \Uc=\z@ \DN@{\dX<\z@}%
- \else \Dc=\z@ \Uc=\dimen@ \DN@{\dX<\z@}\fi\fi\fi
- \setboxz@h{\line@@}\ht\z@=\Uc \dp\z@=\Dc
- \Lc=\z@ \Rc=\wdz@
- \ifdim\next@ \dimen@=\Rc \Rc=\Lc \Lc=\dimen@
- \dimen@=\Uc \Uc=\Dc \Dc=\dimen@ \advance\dimen@-\Uc
- \lower\dimen@\boxz@
- \else \boxz@ \fi
- \edef\tmp@{\egroup \Uc=\the\Uc \Dc=\the\Dc \Lc=\the\Lc \Rc=\the\Rc}%
- \tmp@
- \Edgec={\rectangleEdge}\Invisible@false\Hidden@false
- \ifdim\z@<\Uc \def\Upness@{1}\else \def\Upness@{0}\fi
- \ifdim\z@<\Lc \def\Leftness@{1}\else \def\Leftness@{0}\fi
- \def\Drop@@{\boxz@}\def\Connect@@{\solid@}}
- \xydef@\line@@{{\xydashfont\SemiDirectionChar\/}}
- \xydef@\solid@{%
- \ifInvisible@ \DN@{\no@@}%
- \else \dimen@=\Yc \advance\dimen@-\Yp
- \ifjusthvtest@.05pt>\ifdim\dimen@<\z@-\fi\dimen@ \DN@{\solidhrule@}%
- \else \dimen@=\Xc \advance\dimen@-\Xp
- \ifjusthvtest@.05pt>\ifdim\dimen@<\z@-\fi\dimen@ \DN@{\solidvrule@}%
- \else \DN@{\straight@\solidSpread@}\fi\fi\fi
- \next@}
- \xydef@\solidSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi}
- \xylet@\ifjusthvtest@=\ifdim
- \xydef@\NoRules{\let\ifjusthvtest@=\iffalse}
- \xydef@\UseRules{\let\ifjusthvtest@=\ifdim}
- \xydef@\solidvrule@{\no@@{%
- \ifdim\Yc<\Yp \dimen@=\Yc \Yc=\Yp \Yp=\dimen@ \advance\Yc-\Dp \advance\Yp\Uc
- \else \advance\Yc-\Dc \advance\Yp\Up \fi
- \advance\Xc-.5\xydashw@
- \setboxz@h{\kern\Xc \vrule width\xydashw@ height\Yc depth-\Yp}%
- \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}}
- \xydef@\solidhrule@{\no@@{%
- \ifdim\Xc<\Xp \advance\Xc\Rc \advance\Xp-\Lp
- \else \dimen@=\Xc \Xc=\Xp \Xp=\dimen@ \advance\Xc\Rp \advance\Xp-\Lc \fi
- \advance\Xp-\Xc \advance\Yc.5\xydashw@ \advance\Yp-.5\xydashw@
- \setboxz@h{\kern\Xc \vrule width\Xp height\Yc depth-\Yp}%
- \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}}
- \xydef@\zerodot{\copy\zerodotbox@}
- \xydefcsname@{dir1{.}}{\point@}
- \xydefcsname@{dir2{.}}{\point@ \double@\xydashh@}
- \xydefcsname@{dir3{.}}{\point@ \triple@\xydashh@}
- \xyletcsnamecsname@{dir0{.}}{dir{}}
- \xyletcsnamecsname@{dir{.}}{dir1{.}}
- \xyletcsnamecsname@{dir{:}}{dir2{.}}
- \xydef@\point@{\pointlike@\zerodot\p@}
- \xydef@\pointlike@#1#2{%
- \setboxz@h{#1}\wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@\egroup
- \Invisible@false \Hidden@false \def\Leftness@{.5}\def\Upness@{.5}\ctipEdge@
- \def\Drop@@{\boxz@}\def\Connect@@{\straight@{\dottedSpread@{#2}}}}
- \xydef@\dottedSpread@#1{\setupDirection@
- \dimen@=#1\relax \dimen@=2\dimen@
- \A@=\sdX\cosDirection\dimen@ \B@=\sdY\sinDirection\dimen@
- \global\setbox\lastobjectbox@=\hbox to\A@{\hss
- \kern.5\A@\box\lastobjectbox@\kern.5\A@\hss}%
- \dp\lastobjectbox@=.5\B@ \ht\lastobjectbox@=.5\B@
- \advance\dX\sdX\A@ \advance\dY\sdY\B@
- \advance\Xc\sdX.5\A@ \advance\Yc\sdY.5\B@
- \ifdim\sdY\dY<\sdX\dX \dimen@=\sdX\dX
- \ifdim\A@=\z@\else \divide\dimen@\A@ \fi \count@@=\dimen@
- \else\ifdim\z@=\sdY\dY\else
- \dimen@=\sdY\dY \ifdim\B@=\z@\else \divide\dimen@\B@ \fi \count@@=\dimen@
- \fi\fi \advance\count@@\@ne}
- \xydefcsname@{dir1{~}}{\squiggle@}
- \xydefcsname@{dir2{~}}{\squiggle@ \double@\xybsqlh@}
- \xydefcsname@{dir3{~}}{\squiggle@ \triple@\xybsqlh@}
- \xyletcsnamecsname@{dir0{~}}{dir{}}
- \xyletcsnamecsname@{dir{~}}{dir1{~}}
- \xydef@\squiggle@{\xybsqlfont
- \dimen@=\sdX\cosDirection\xybsqll@ \advance\dimen@.1\p@
- \dimen@ii=\sdY\sinDirection\xybsqll@
- \kern\dimen@\squiggle@@
- \edef\tmp@{\egroup \Uc=\the\dimen@ii \Lc=\the\dimen@}\tmp@
- \wdz@=2\Lc \Rc=\Lc \ht\z@=\Uc \Dc=\Uc \dp\z@=\Uc \Edgec={\rectangleEdge}%
- \Invisible@false \Hidden@false \def\Leftness@{.5}\def\Upness@{.5}%
- \def\Drop@@{\boxz@}\def\Connect@@{\straight@\squiggledSpread@}}
- \xydef@\squiggle@@{\DirectionChar \count@=\DirectionChar
- \advance\count@-64 \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}
- \xydef@\squiggledSpread@{%
- \dimen@=\dX \advance\dimen@-\sdX\count@@\A@ \advance\dimen@\sdX.3\p@
- \advance\Xc-.5\dimen@ \advance\dX-\dimen@
- \dimen@=\dY \advance\dimen@-\sdY\count@@\B@ \advance\dimen@\sdY.3\p@
- \advance\Yc-.5\dimen@ \advance\dY-\dimen@}
- \xydef@\double@#1{\edef\Drop@@{\dimen@=#1\relax
- \dimen@=.5\dimen@ \A@=-\sinDirection\dimen@ \B@=\cosDirection\dimen@
- \setbox2=\hbox{\kern\A@\raise\B@\copy\z@}\dp2=\z@ \ht2=\z@ \wd2=\z@ \box2
- \setbox2=\hbox{\kern-\A@\raise-\B@\boxz@}\dp2=\z@ \ht2=\z@ \wd2=\z@ \box2 }}
- \xydef@\triple@#1{\edef\Drop@@{\dimen@=#1\relax
- \A@=-\sinDirection\dimen@ \B@=\cosDirection\dimen@
- \setbox2=\hbox{\kern\A@\raise\B@\copy\z@}\dp2=\z@ \ht2=\z@ \wd2=\z@ \box2
- \setbox2=\hbox{\kern-\A@\raise-\B@\copy\z@}\dp2=\z@ \ht2=\z@ \wd2=\z@ \box2
- \dp\z@=\z@ \ht\z@=\z@ \wdz@=\z@ \boxz@}}
- \xydefcsname@{dir1{--}}{\dash@}
- \xydefcsname@{dir2{--}}{\dash@ \double@\xydashh@}
- \xydefcsname@{dir3{--}}{\dash@ \triple@\xydashh@}
- \xyletcsnamecsname@{dir0{--}}{dir{}}
- \xyletcsnamecsname@{dir{--}}{dir1{--}}
- \xyletcsnamecsname@{dir{==}}{dir2{--}}
- \xydef@\dash@{\line@ \wdz@=2\wdz@ \ht\z@=2\ht\z@ \dp\z@=2\dp\z@
- \multiply\Dc\tw@ \multiply\Uc\tw@ \multiply\Lc\tw@ \multiply\Rc\tw@
- \def\Connect@@{\straight@\dashedSpread@}}
- \xydef@\dashedSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi
- \advance\dX\sdX.5\A@ \advance\dY\sdY.5\B@
- \ifdim\z@<\dX \advance\Xc.5\A@ \fi \advance\Yc\sdY.5\B@}
- \xydefcsname@{dir1{~~}}{\dashsquiggle@}
- \xydefcsname@{dir2{~~}}{\dashsquiggle@ \double@\xybsqlh@}
- \xydefcsname@{dir3{~~}}{\dashsquiggle@ \triple@\xybsqlh@}
- \xyletcsnamecsname@{dir0{~~}}{dir{}}
- \xyletcsnamecsname@{dir{~~}}{dir1{~~}}
- \xydef@\dashsquiggle@{\squiggle@
- \multiply\Dc\tw@ \multiply\Uc\tw@ \multiply\Lc\tw@ \multiply\Rc\tw@
- \dimen@=\Lc \advance\dimen@\Rc \wdz@=\dimen@ \ht\z@=\Uc \dp\z@=\Dc
- \def\Connect@@{\straight@\dashsquiggledSpread@}}
- \xydef@\dashsquiggledSpread@{\ifnum\z@<\count@@ \advance\count@@\@ne \fi
- \advance\Xc.5\A@ \advance\dX.5\A@ \advance\Yc.25\B@ \advance\dY.5\B@}
- \xyletcsnamecsname@{dir1{..}}{dir{.}}
- \xyletcsnamecsname@{dir2{..}}{dir2{.}}
- \xyletcsnamecsname@{dir3{..}}{dir3{.}}
- \xyletcsnamecsname@{dir{..}}{dir1{.}}
- \xyletcsnamecsname@{dir{::}}{dir2{.}}
- \xylet@\ctipEdge@=\czeroEdge@
- \xydefcsname@{dir1{>}}{\tip@}
- \xydefcsname@{dir^{>}}{\atip@}
- \xydefcsname@{dir_{>}}{\btip@}
- \xyletcsnamecsname@{dir0{>}}{dir{}}
- \xyletcsnamecsname@{dir{>}}{dir1{>}}
- \xydefcsname@{dir1{<}}{\reverseDirection@\tip@}
- \xydefcsname@{dir^{<}}{\reverseDirection@\btip@}
- \xydefcsname@{dir_{<}}{\reverseDirection@\atip@}
- \xyletcsnamecsname@{dir0{<}}{dir{}}
- \xyletcsnamecsname@{dir{<}}{dir1{<}}
- \xydef@\tip@{\tip@x\tip@@}
- \xydef@\atip@{\tip@x\atip@@}
- \xydef@\btip@{\tip@x\btip@@}
- \xydef@\tip@x#1{#1\egroup
- \ctipEdge@ \Invisible@false \Hidden@false \def\Leftness@{.5}\def\Upness@{.5}%
- \def\Drop@@{\boxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}}
- \xydef@\tip@@{\atip@@\btip@@}
- \xydef@\atip@@{\xyatipfont\DirectionChar}
- \xydef@\btip@@{\xybtipfont\DirectionChar}
- \xydefcsname@{dir2{>}}{\Tip@}
- \xydefcsname@{dir2{<}}{\reverseDirection@\Tip@}
- \xydef@\Tip@{\kern2.5pt \vrule height2.5pt depth2.5pt width\z@
- \Tip@@ \kern2.5pt \egroup
- \Uc=2.5pt \Dc=2.5pt \Lc=2.5pt \Rc=2.5pt \Edgec={\circleEdge}%
- \Invisible@false \Hidden@false \def\Leftness@{.5}\def\Upness@{.5}%
- \def\Drop@@{\boxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}}
- \xydef@\Tip@@{\count@=\DirectionChar
- \advance\count@-4 \ifnum\count@<\z@ \advance\count@128 \fi
- \xyatipfont\char\count@
- \advance\count@ 8 \ifnum127<\count@ \advance\count@-128 \fi
- \xybtipfont\char\count@}
- \xydefcsname@{dir3{>}}{\Ttip@}
- \xydefcsname@{dir3{<}}{\reverseDirection@\Ttip@}
- \xydef@\Ttip@{\kern3.2pt \vrule height3.2pt depth3.2pt width\z@
- \Ttip@@ \kern3.2pt \egroup
- \Uc=3.2pt \Dc=3.2pt \Lc=3.2pt \Rc=3.2pt \Edgec={\circleEdge}%
- \Invisible@false \Hidden@false \def\Leftness@{.5}\def\Upness@{.5}%
- \def\Drop@@{\boxz@}\def\Connect@@{\straight@{\dottedSpread@\jot}}}
- \xydef@\Ttip@@{%
- \setboxz@h\bgroup\reverseDirection@\line@ \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@
- \kern-\Lc \boxz@ \kern\Lc
- {\vDirection@(1,-.31)\xydashl@ \xyatipfont\char\DirectionChar}%
- {\vDirection@(1,+.31)\xydashl@ \xybtipfont\char\DirectionChar}}
- \xydefcsname@{dir1{|}}{\stopper@}
- \xydefcsname@{dir^{|}}{\aboveDirection@\xydashl@
- \shiftdir@\line@\z@ \pointlike@{}\xydashh@}
- \xydefcsname@{dir_{|}}{\belowDirection@\xydashl@
- \shiftdir@\line@\z@ \pointlike@{}\xydashh@}
- \xydefcsname@{dir2{|}}{\stopper@ \double@\xydashh@}
- \xydefcsname@{dir3{|}}{\stopper@ \double@{2\xydashh@}}
- \xyletcsnamecsname@{dir0{|}}{dir{}}
- \xyletcsnamecsname@{dir{|}}{dir1{|}}
- \xydef@\stopper@{\tip@x\stopper@@}
- \xydef@\stopper@@{\setboxz@h{\count@=\SemiDirectionChar \advance\count@64
- \ifnum127<\count@ \advance\count@-128 \fi \xydashfont\char\count@\/}%
- \setboxz@h{\kern-.5\wdz@ \dimen@=\sdY\cosDirection\xydashl@
- \ifnum\SemiDirectionChar=95 \dimen@=\sdX\sdY\dimen@ \fi
- \raise.5\dimen@\boxz@}%
- \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
- \xydefcsname@{dir1{(}}{\hook@}
- \xydefcsname@{dir^{(}}{\ahook@}
- \xydefcsname@{dir_{(}}{\bhook@}
- \xyletcsnamecsname@{dir0{(}}{dir{}}
- \xyletcsnamecsname@{dir{(}}{dir1{(}}
- \xydefcsname@{dir1{)}}{\reverseDirection@\hook@}
- \xydefcsname@{dir^{)}}{\reverseDirection@\bhook@}
- \xydefcsname@{dir_{)}}{\reverseDirection@\ahook@}
- \xyletcsnamecsname@{dir0{)}}{dir{}}
- \xyletcsnamecsname@{dir{)}}{dir1{)}}
- \xydef@\hook@{\tip@x\hook@@}
- \xydef@\hook@@{\setboxz@h{\xybsqlfont
- \vDirection@(1,-1){.707107\xybsqll@}%
- \hbox{\DirectionChar
- \kern-\dY\raise\dX\hbox{\count@=\DirectionChar \advance\count@-32
- \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}}%
- \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
- \xydef@\ahook@{\tip@x\ahook@@}
- \xydef@\ahook@@{\setboxz@h{\xybsqlfont
- \vDirection@(1,-1){.707107\xybsqll@}\kern-\dX
- \lower\dY\hbox{\DirectionChar
- \kern-\dY\raise\dX\hbox{\count@=\DirectionChar \advance\count@-32
- \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}}%
- \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
- \xydef@\bhook@{\tip@x\bhook@@}
- \xydef@\bhook@@{\setboxz@h{\xybsqlfont
- \vDirection@(-1,-1){.707107\xybsqll@}\DirectionChar
- \kern\dX\raise\dY\hbox{\count@=\DirectionChar \advance\count@-96
- \ifnum\count@<\z@ \advance\count@128 \fi \char\count@}}%
- \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
- \xydefcsname@{dir^{'}}{\reverseDirection@\bturn@}
- \xydefcsname@{dir_{'}}{\reverseDirection@\aturn@}
- \xydefcsname@{dir^{`}}{\aturn@}
- \xydefcsname@{dir_{`}}{\bturn@}
- \xydef@\aturn@{\tip@x\aturn@@}
- \xydef@\aturn@@{\setboxz@h{\xybsqlfont
- \vDirection@(1,-1){.707107\xybsqll@}\kern-\dX
- \lower\dY\hbox{\DirectionChar}}%
- \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
- \xydef@\bturn@{\tip@x\bturn@@}
- \xydef@\bturn@@{\setboxz@h{\xybsqlfont
- \vDirection@(-1,-1){.707107\xybsqll@}\DirectionChar}%
- \wdz@=\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
- \xydef@\newdir#1#{\newdir@{#1}}
- \xydef@\newdir@#1#2#3{\xydefcsname@{dir#1{#2}}{\composite@{}{#3}}}
- \xydef@\shiftdir@#1#2{%
- \setbox\z@=\hbox\bgroup#1\relax
- \setboxz@h{\dimen@ii=#2\relax
- \dimen@=-\cosDirection\dimen@ii \advance\dimen@-\Lc
- \kern\dimen@ \lower\sinDirection\dimen@ii\boxz@}%
- \wdz@\z@ \ht\z@=\z@ \dp\z@=\z@ \boxz@}
- \xylet@\tipjot@=\jot
- \xydefcsname@{dir1{>>}}{\shiftdir@\tip@\tipjot@ \tip@}
- \xydefcsname@{dir^{>>}}{\shiftdir@\atip@\tipjot@ \atip@}
- \xydefcsname@{dir_{>>}}{\shiftdir@\btip@\tipjot@ \btip@}
- \xydefcsname@{dir2{>>}}{\composite@{}{h!/\tipjot@/\dir2{>}*\dir2{>}}}
- \xydefcsname@{dir3{>>}}{\composite@{}{h!/\tipjot@/\dir3{>}*\dir3{>}}}
- \xyletcsnamecsname@{dir0{>>}}{dir{}}
- \xyletcsnamecsname@{dir{>>}}{dir1{>>}}
- \xydefcsname@{dir1{<<}}{\reverseDirection@ \shiftdir@\tip@\tipjot@ \tip@}
- \xydefcsname@{dir^{<<}}{\reverseDirection@ \shiftdir@\btip@\tipjot@ \btip@}
- \xydefcsname@{dir_{<<}}{\reverseDirection@ \shiftdir@\atip@\tipjot@ \atip@}
- \xydefcsname@{dir2{<<}}{\composite@{}{h!/-\tipjot@/\dir2{<}*\dir2{<}}}
- \xydefcsname@{dir3{<<}}{\composite@{}{h!/-\tipjot@/\dir3{<}*\dir3{<}}}
- \xyletcsnamecsname@{dir0{<<}}{dir{}}
- \xyletcsnamecsname@{dir{<<}}{dir1{<<}}
- \xydefcsname@{dir{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@
- \pointlike@{}\jot}
- \xydefcsname@{dir^{||}}{\shiftdir@{\aboveDirection@\xydashl@\line@}\xydashh@
- \shiftdir@{\aboveDirection@\xydashl@\line@}\z@ \pointlike@{}\jot}
- \xydefcsname@{dir_{||}}{\shiftdir@{\belowDirection@\xydashl@\line@}\xydashh@
- \shiftdir@{\belowDirection@\xydashl@\line@}\z@ \pointlike@{}\jot}
- \xydefcsname@{dir2{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@
- \pointlike@{}\jot \double@\xydashh@}
- \xydefcsname@{dir3{||}}{\shiftdir@\stopper@\xydashh@ \shiftdir@\stopper@\z@
- \pointlike@{}\jot \double@{2\xydashh@}}
- \xydefcsname@{dir{>|}}{\shiftdir@\stopper@\z@ \tip@}
- \xydefcsname@{dir{>>|}}{\shiftdir@\stopper@\z@ \shiftdir@\tip@\tipjot@ \tip@}
- \xydefcsname@{dir{|<}}{\reverseDirection@ \shiftdir@\stopper@\z@ \tip@}
- \xydefcsname@{dir{|<<}}{\reverseDirection@
- \shiftdir@\stopper@\z@ \shiftdir@\tip@\tipjot@ \tip@}
- \xydefcsname@{dir{|-}}{\shiftdir@\stopper@\z@
- \shiftdir@\line@\z@ \pointlike@{}\jot}
- \xydefcsname@{dir^{|-}}{\shiftdir@{\aboveDirection@\xydashl@ \line@}\z@
- \shiftdir@\line@\z@ \pointlike@{}\jot}
- \xydefcsname@{dir_{|-}}{\shiftdir@{\belowDirection@\xydashl@ \line@}\z@
- \shiftdir@\line@\z@ \pointlike@{}\jot}
- \xydefcsname@{dir2{|-}}{\shiftdir@\stopper@\z@
- \shiftdir@\line@\z@ \pointlike@{}\jot \double@\xydashh@}
- \xydefcsname@{dir3{|-}}{\shiftdir@\stopper@\z@
- \shiftdir@\line@\z@ \pointlike@{}\jot \triple@\xydashh@}
- \xyletcsnamecsname@{dir0{|=}}{dir{}}
- \xyletcsnamecsname@{dir{|=}}{dir2{|-}}
- \xydefcsname@{dir{+}}{%
- \DN@##1{\composite@{}{##10\dir{|}*!C##10\dir{-}}}\addEQ@\next@}
- \xydefcsname@{dir{x}}{\vDirection@(1,1)\jot
- \DN@##1{\composite@{}{##10\dir{|}*!C##10\dir{-}}}\addEQ@\next@}
- \xydefcsname@{dir{/}}{\vDirection@(1,-.3)\jot \stopper@}
- \xydefcsname@{dir{*}}{\solidpoint@}
- \xydef@\solidpoint@{%
- \pointlike@{\kern-1.8pt\lower1.8pt\hbox{$\scriptstyle\bullet$}}\jot}
- \xydefcsname@{dir{o}}{\hollowpoint@}
- \xydef@\hollowpoint@{%
- \pointlike@{\kern-1.8pt\lower1.8pt\hbox{$\scriptstyle\circ$}}\jot}
- \message{circles,}
- \xydef@\cir#1#{\hbox\bgroup
- \afterVECTORorEMPTY{\xy@@{\R@=\Xc}\cir@}{\xy@@{\R@=\Rc}\cir@}#1@}
- \xydef@\cir@#1@#2{%
- \DN@{#1}\ifx\next@\empty\else \xyerror@{illegal circle <radius>: must be
- <vector> or <empty>}{}\fi
- \afterCIRorDIAG{\xyFN@\cir@cir}{\xyFN@\cir@diag}#2@}
- \xydef@\cir@cir{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\cir@cir}%
- \else \ifx @\next \DN@ @{\cir@i}%
- \else \xyerror@{illegal <cir>: must have form <diag><orient><diag> or
- <empty>}{}%
- \fi\fi \next@}
- \xydef@\cir@diag{%
- \DN@{\xyerror@{illegal <cir>: must have form <diag><orient><diag> or
- <empty>}{}}%
- \ifx @\next \ifnum\count@=8
- \DN@ @{\def\CIRin@@{0}\def\CIRorient@@{\CIRfull@}\def\CIRout@@{7}\cir@i}%
- \fi\fi \next@}
- \xydef@\cir@i{%
- \ifnum\CIRin@@=8 \xyerror@{incomplete <cir> specification}{%
- The <cir> you specified as <diag><orient><diag> is not sufficiently specific.}%
- \def\CIRin@@{0}\fi
- \ifdim\R@<.5\p@ \R@=\z@ \zerodot
- \else \CIRorient@@ \cirbuild@ \fi
- \Lc=\R@ \Rc=\R@ \Dc=\R@ \Uc=\R@ \def\Leftness@{.5}\def\Upness@{.5}%
- \def\Drop@@{\boxz@}\def\Connect@@{\straight@\relax}\Edgec={\circleEdge}%
- \OBJECT@x}
- \xydef@\CIRin@@{3}
- \xydef@\CIRout@@{3}
- \xylet@\CIRorient@@=\empty
- \xydef@\afterCIRorDIAG#1#2{\def\afterCIR@{#1}\def\afterCIRDIAG@{#2}\xyFN@\CIR@}
- \xylet@\afterCIR@=\empty
- \xylet@\afterCIRDIAG@=\empty
- \xydef@\CIR@{\count@=8 \afterDIAG{\edef\CIRin@@{\the\count@}\xyFN@\CIR@@}}
- \xydef@\CIR@@{%
- \ifx \space@\next \expandafter\DN@\space{\xyFN@\CIR@@}%
- \else\ifx ^\next
- \DN@ ^{\def\CIRorient@@{\CIRacw@}%
- \afterDIAG{\edef\CIRout@@{\the\count@}\afterCIR@}}%
- \else\ifx _\next
- \DN@_{\def\CIRorient@@{\CIRcw@}%
- \afterDIAG{\edef\CIRout@@{\the\count@}\afterCIR@}}%
- \else
- \DN@{\def\CIRorient@@{\relax}\afterCIRDIAG@}%
- \fi\fi\fi \next@}
- \xylet@\CIRtest@@=\relax
- \xydef@\CIRlo@@{0}
- \xydef@\CIRhi@@{0}
- \xydef@\CIRfull@{\def\CIRtest@@##1##2{##2}}
- \xydef@\cirbuild@{\cirrestrict@@ \multiply\count@8
- \circhar@0\circhar@7\kern\dimen@
- \circhar@1\circhar@6\kern\dimen@
- \circhar@2\circhar@5\kern\dimen@
- \circhar@3\circhar@4\kern\dimen@}
- \xydef@\circhar@#1{%
- \setboxz@h{\circhar@@{#1}}\dimen@=\wdz@ \wdz@=\z@ \ht\z@=\R@ \dp\z@=\R@
- \CIRtest@@#1{\boxz@}\setbox\z@=\copy\voidb@x}
- \xydef@\circhar@@#1{{\xycircfont \advance\count@#1\relax \char\count@}}
- \xydef@\cirrestrict@@{\dimen@=\R@
- \ifdim\R@<8pt \count@=\dimen@ \divide\count@\p@ \advance\count@\m@ne
- \else\ifdim\R@<16pt \count@=\dimen@
- \dimen@=2\p@ \divide\count@\dimen@ \advance\count@3
- \else\ifdim\R@<32pt \count@=\dimen@
- \dimen@=4\p@ \divide\count@\dimen@ \advance\count@7
- \else \count@=15 \fi\fi\fi
- \R@=\p@
- \ifnum\count@<8 \multiply\R@\count@ \advance\R@\p@
- \else\ifnum\count@<12 \multiply\R@\count@ \multiply\R@\tw@ \advance\R@-6\p@
- \else\ifnum\count@<16 \multiply\R@\count@ \multiply\R@ 4 \advance\R@-28\p@
- \else \multiply\R@ 32 \fi\fi\fi}
- \xydef@\CIRacw@{\count@@=\CIRin@@ \count@=\CIRout@@
- \ifnum\count@=8 \count@=\count@@
- \ifnum\count@<6 \advance\count@\tw@ \else \advance\count@-6 \fi \fi
- \ifnum\count@@<\@ne \advance\count@@7 \else \advance\count@@\m@ne \fi
- \ifnum\count@<\@ne \advance\count@7 \else \advance\count@\m@ne \fi
- \ifnum\count@@>\count@ \let\CIRtest@@=\CIRtest@outside
- \edef\CIRlo@@{\the\count@}\edef\CIRhi@@{\the\count@@}%
- \else \let\CIRtest@@=\CIRtest@inside
- \edef\CIRlo@@{\the\count@@}\edef\CIRhi@@{\the\count@}%
- \fi}
- \xydef@\CIRcw@{\count@@=\CIRin@@ \count@=\CIRout@@
- \ifnum\count@=8 \count@=\count@@
- \ifnum\count@>\@ne \advance\count@-\tw@ \else \advance\count@6 \fi \fi
- \ifnum\count@@<5 \advance\count@@\thr@@ \else \advance\count@@-5 \fi
- \ifnum\count@<5 \advance\count@\thr@@ \else \advance\count@-5 \fi
- \ifnum\count@@<\count@ \let\CIRtest@@=\CIRtest@outside
- \edef\CIRlo@@{\the\count@@}\edef\CIRhi@@{\the\count@}%
- \else \let\CIRtest@@=\CIRtest@inside
- \edef\CIRlo@@{\the\count@}\edef\CIRhi@@{\the\count@@}%
- \fi}
- \xydef@\CIRtest@inside#1#2{\let\next@=\relax
- \ifnum\CIRlo@@>#1\else \ifnum#1<\CIRhi@@\DN@{#2}\fi\fi \next@}
- \xydef@\CIRtest@outside#1#2{\let\next@=\relax
- \ifnum\CIRlo@@>#1\DN@{#2}\else \ifnum#1<\CIRhi@@\else\DN@{#2}\fi\fi \next@}
- \message{text;}
- \xydef@\txt{\hbox\bgroup \xyFN@\txt@}
- \xydef@\txt@{%
- \addLT@\ifx\next \addGT@{\addLT@\DN@##1}{\A@=##1\txt@i}%
- \else \DN@{\A@=\maxdimen \txt@i}\fi \next@}
- \xydef@\txt@i#1#{%
- \setboxz@h{#1\mathstrut}\dimen@=\ht\z@ \advance\dimen@\dp\z@
- \baselineskip=1.1\dimen@ \lineskip=.2\dimen@ \lineskiplimit=\lineskip
- \def\txtline@@##1{\txtline@{#1}{##1}}\object@\txt@ii}
- \xylet@\txtline@@=\eat@
- \xydef@\txtline@#1#2{\relax\setboxz@h{#1\ignorespaces #2\unskip}%
- \ifdim\A@<\wdz@ \setboxz@h{\hsize=\A@
- \leftskip=0pt plus4em \rightskip=\leftskip
- \parfillskip=0pt \parindent=0pt
- \spaceskip=.3333em \xspaceskip=.5em
- \pretolerance=9999 \tolerance=9999
- \hyphenpenalty=9999 \exhyphenpenalty=9999
- \vbox{#1\noindent\ignorespaces #2\unskip}}%
- \else\ifdim\A@<\maxdimen\setboxz@h to\A@{\hfil\boxz@\hfil}\fi\fi
- \boxz@}
- \xydef@\txt@ii#1{\vbox{%
- \let\\=\cr
- \tabskip=\z@skip \halign{\relax\hfil\txtline@@{##}\hfil\cr#1\crcr}}}
- \message{options;}
- \xylet@\xyoption@@=\relax
- \xydef@\xyoption#1{\xyinputorelse@{xy#1}%
- {\DN@{#1}\edef\next@{\codeof\next@}\xyerror@{No `\next@' option}{%
- Your \string\xyoption\string{\next@\string} request could not be granted: the
- required^^J%
- file `xy\next@.tex' could not be located. Please make sure that it is^^J%
- properly installed before continuing.}}%
- \def\xyoption@@{#1}\edef\xyoption@@{\codeof\xyoption@@}\xywith@@
- \ignorespaces}
- \xydef@\xyrequire#1{\DN@{#1}%
- \expandafter\let\expandafter\next@\csname xy\codeof\next@ loaded\endcsname
- \ifx \next@\relax \DN@{\xyoption{#1}}\else \DN@{}\fi \next@}
- \xylet@\xywith@@=\empty
- \xydef@\xywithoption#1#2{\DN@{#1}%
- \expandafter\let\expandafter\next@\csname xy\codeof\next@ loaded\endcsname
- \ifx \next@\relax
- \expandafter\def\expandafter\xywith@@\expandafter{\xywith@@
- \DN@{#1}\edef\next@{\codeof\next@}%
- \ifx\next@\xyoption@@ \DN@{#2}%
- \else \let\next@=\relax \fi \next@}%
- \else \DN@{#2}\fi \next@}
- \xydef@\xyprovide#1#2#3#4#5#6{%
- \def\next{#1}\edef\next{\codeof\next}\edef\next@{#3}%
- \message{XY-pic option: #2 v.\next@}%
- \expandafter\let\expandafter\nextii@\csname xy\next loaded\endcsname
- \ifx \next@\nextii@ \message{not reloaded}\endinput
- \else
- \ifx \nextii@\relax\else \xyerror@{Option `\next' version mismatch}{%
- You previously loaded, or the format has preloaded, a different version^^J%
- of this option. Just hit return to try to load this version instead (and^^J%
- be prepared for a lot of warnings about redefinitions).}%
- \fi
- \expandafter\let\csname xy\next loaded\endcsname=\next@
- \expandafter\let\expandafter\xyenddocmode@\csname DOCMODE\endcsname
- \expandafter\let\csname DOCMODE\endcsname\xyprovidedocmode@
- \xycatcodes
- \fi \ignorespaces}
- \xydef@\xyendinput{\expandafter\let\csname DOCMODE\endcsname=\xyenddocmode@
- \message{loaded}\xyuncatcodes\endinput}
- \expandafter\xylet@\expandafter\xyprovidedocmode@\csname DOCMODE\endcsname
- \xylet@\xyenddocmode@=\relax
- \message{algorithms: directions,}
- \xydef@\DirectionfromtheDirection@{\noexpand\Direction=\the\Direction
- \noexpand\dX=\the\dX \noexpand\dY=\the\dY
- \def\noexpand\sdX{\sdX}\def\noexpand\sdY{\sdY}%
- \noexpand\K@dXdY=\the\K@dXdY \noexpand\K@dYdX=\the\K@dYdX
- \chardef\noexpand\DirectionChar=\the\DirectionChar
- \chardef\noexpand\SemiDirectionChar=\the\SemiDirectionChar
- \def\noexpand\cosDirection{\cosDirection}%
- \def\noexpand\sinDirection{\sinDirection}%
- \noexpand\resetupDirection@}
- \xydef@\Directiontest@@#1#2{#2}
- \xydef@\setupDirection@{%
- \dX=\Xc\advance\dX-\Xp \dY=\Yc\advance\dY-\Yp
- \Directiontest@@\relax\setupDirection@i}
- \xydef@\setupDirection@i{\DN@{\setupDirection@ii}%
- \ifdim\dX=\dY
- \ifdim\dY=\z@ \DN@{}%
- \else\ifdim\dX<\z@ \DN@{\dlDirection@{-1.4142\dX}}%
- \else \DN@{\urDirection@{1.4142\dX}}\fi\fi
- \else\ifdim\dX<\dY
- \ifdim\dX=\z@ \DN@{\uDirection@\dY}%
- \else\ifdim\dY=\z@ \DN@{\lDirection@{-\dX}}%
- \else\ifdim-\dX=\dY \DN@{\ulDirection@{-1.4142\dX}}\fi\fi\fi
- \else
- \ifdim\dX=\z@ \DN@{\dDirection@{-\dY}}%
- \else\ifdim\dY=\z@ \DN@{\rDirection@\dX}%
- \else\ifdim\dX=-\dY \DN@{\drDirection@{1.4142\dX}}\fi\fi\fi
- \fi\fi \next@}
- \xydef@\dlDirection@{\Direction=\z@
- \def\cosDirection{-.7071}\def\sinDirection{-.7071}\def\sdX{-}\def\sdY{-}%
- \chardef\DirectionChar=127\relax\chardef\SemiDirectionChar=127\relax
- \K@dXdY=1\K \K@dYdX=1\K \fixedDirection@}
- \xydef@\dDirection@{\Direction=\K
- \def\cosDirection{0}\def\sinDirection{-1}\def\sdX{+}\def\sdY{-}%
- \chardef\DirectionChar=15\relax\chardef\SemiDirectionChar=31\relax
- \K@dXdY=\z@ \K@dYdX=\KK@\K \fixedDirection@}
- \xydef@\drDirection@{\dimen@ii=2\K \Direction=\dimen@ii
- \def\cosDirection{+.7071}\def\sinDirection{-.7071}\def\sdX{+}\def\sdY{-}%
- \chardef\DirectionChar=31\relax\chardef\SemiDirectionChar=63\relax
- \K@dXdY=-1\K \K@dYdX=-1\K \fixedDirection@}
- \xydef@\rDirection@{\dimen@ii=3\K \Direction=\dimen@ii
- \def\cosDirection{+1}\def\sinDirection{0}\def\sdX{+}\def\sdY{+}%
- \chardef\DirectionChar=47\relax\chardef\SemiDirectionChar=95\relax
- \K@dXdY=\KK@\K \K@dYdX=\z@ \fixedDirection@}
- \xydef@\urDirection@{\dimen@ii=4\K \Direction=\dimen@ii
- \def\cosDirection{+.7071}\def\sinDirection{+.7071}\def\sdX{+}\def\sdY{+}%
- \chardef\DirectionChar=63\relax\chardef\SemiDirectionChar=127\relax
- \K@dXdY=1\K \K@dYdX=1\K \fixedDirection@}
- \xydef@\uDirection@{\dimen@ii=-3\K \Direction=\dimen@ii
- \def\cosDirection{0}\def\sinDirection{+1}\def\sdX{+}\def\sdY{+}%
- \chardef\DirectionChar=79\relax\chardef\SemiDirectionChar=31\relax
- \K@dXdY=\z@ \K@dYdX=\KK@\K \fixedDirection@}
- \xydef@\ulDirection@{\dimen@ii=-2\K \Direction=\dimen@ii
- \def\cosDirection{-.7071}\def\sinDirection{+.7071}\def\sdX{-}\def\sdY{+}%
- \chardef\DirectionChar=95\relax\chardef\SemiDirectionChar=63\relax
- \K@dXdY=-1\K \K@dYdX=-1\K \fixedDirection@}
- \xydef@\lDirection@{\Direction=-\K
- \def\cosDirection{-1}\def\sinDirection{0}\def\sdX{-}\def\sdY{+}%
- \chardef\DirectionChar=111\relax\chardef\SemiDirectionChar=95\relax
- \K@dXdY=\KK@\K \K@dYdX=\z@ \fixedDirection@}
- \xydef@\fixedDirection@#1{\dimen@ii=#1\relax
- \dX=\cosDirection\dimen@ii \dY=\sinDirection\dimen@ii
- \resetupDirection@}
- \xydef@\setupDirection@ii{%
- \ifdim\dX<\z@ \def\sdX{-}\else \def\sdX{+}\fi
- \ifdim\dY<\z@ \def\sdY{-}\else \def\sdY{+}\fi
- \K@dXdY=\sdX\dX \ifdim\K@dXdY<500pt \multiply\K@dXdY\KK@ \fi \dimen@=\sdY\dY
- \advance\dimen@.5\KK@ \divide\dimen@\KK@
- \ifdim\dimen@=\z@\else
- \advance\K@dXdY by.5\dimen@\relax \divide\K@dXdY\dimen@
- \fi \K@dXdY=\sdX\sdY\K@dXdY
- \K@dYdX=\sdY\dY \ifdim\K@dYdX<500pt \multiply\K@dYdX\KK@ \fi \dimen@=\sdX\dX
- \advance\dimen@.5\KK@ \divide\dimen@\KK@
- \ifdim\dimen@=\z@\else
- \advance\K@dYdX by.5\dimen@\relax \divide\K@dYdX\dimen@
- \fi \K@dYdX=\sdX\sdY\K@dYdX
- \Direction=\maxdimen
- \ifnum\K@dXdY<-\K \else \ifnum\K<\K@dXdY \else
- \ifdim \dY<\z@
- \Direction=\K \advance\Direction-\K@dXdY
- \else
- \Direction=\K \multiply\Direction-\thr@@ \advance\Direction-\K@dXdY
- \fi\fi\fi
- \ifnum-\K<\K@dYdX \ifnum\K@dYdX<\K
- \ifdim \dX<\z@
- \Direction=-\K \advance\Direction\K@dYdX
- \else
- \Direction=\K \multiply\Direction\thr@@ \advance\Direction\K@dYdX
- \fi\fi\fi
- \ifnum\Direction=\maxdimen
- \Direction=\K@dYdX \advance\Direction-\K@dXdY \divide\Direction\tw@
- \ifnum\K@dXdY<\z@ \advance\Direction\K \advance\Direction\K
- \else \advance\Direction-\K \advance\Direction-\K \fi
- \fi
- \count@@=\K \multiply\count@@ by8 \advance\count@@\Direction
- \count@=\count@@ \advance\count@\KK@ \divide\count@64 \advance\count@\m@ne
- \loop@\ifnum127<\count@ \advance\count@-128 \repeat@
- \chardef\DirectionChar\count@
- \advance\count@@16 \divide\count@@\KK@ \advance\count@@\m@ne
- \loop@\ifnum127<\count@@ \advance\count@@-128 \repeat@
- \chardef\SemiDirectionChar\count@@
- \setbox8=\hbox{\xydashfont\SemiDirectionChar\/}%
- \quotient@@\cosDirection{\sdX\wd8}\xydashl@
- \setbox8=\hbox{\xydashfont\count@=\SemiDirectionChar\advance\count@-64
- \ifnum\count@<\z@ \advance\count@128 \fi \char\count@\/}%
- \quotient@@\sinDirection{\sdY\wd8}\xydashl@
- \resetupDirection@
- }
- \xydef@\reverseDirection@{%
- \dX=-\dX \dY=-\dY
- \ifdim\dX<\z@ \def\sdX{-}\else \def\sdX{+}\fi
- \ifdim\dY<\z@ \def\sdY{-}\else \def\sdY{+}\fi
- \dimen@=4\K \ifnum\Direction<\z@ \advance\Direction\dimen@
- \else \advance\Direction-\dimen@ \fi
- \count@=\DirectionChar \ifnum\count@<64 \advance\count@64
- \else \advance\count@-64 \fi \chardef\DirectionChar=\count@
- \edef\cosDirection{\if-\cosDirection\else-\cosDirection\fi}%
- \edef\sinDirection{\if-\sinDirection\else-\sinDirection\fi}%
- \resetupDirection@}
- \xydef@\aboveDirection@#1{%
- \dimen@=\dX \dX=-\dY \dY=\dimen@
- \dimen@=\K@dXdY \K@dXdY=-\K@dYdX \K@dYdX=-\dimen@
- \ifdim\dX<\z@ \def\sdX{-}\else \def\sdX{+}\fi
- \ifdim\dY<\z@ \def\sdY{-}\else \def\sdY{+}\fi
- \dimen@=2\K \ifdim 1\Direction<\dimen@\else \dimen@=-6\K \fi
- \advance\Direction\dimen@
- \count@=\DirectionChar \ifnum\count@<96 \advance\count@32
- \else \advance\count@-96 \fi \chardef\DirectionChar=\count@
- \count@=\SemiDirectionChar \ifnum\count@<64 \advance\count@64
- \else \advance\count@-64 \fi \chardef\SemiDirectionChar=\count@
- \let\tmp@=\cosDirection
- \edef\cosDirection{\if-\sinDirection\else-\sinDirection\fi}%
- \let\sinDirection=\tmp@
- \dimen@=#1\relax \dX=\cosDirection\dimen@ \dY=\sinDirection\dimen@
- \resetupDirection@}
- \xydef@\belowDirection@#1{%
- \dimen@=\dX \dX=\dY \dY=-\dimen@
- \dimen@=\K@dXdY \K@dXdY=-\K@dYdX \K@dYdX=-\dimen@
- \ifdim\dX<\z@ \def\sdX{-}\else \def\sdX{+}\fi
- \ifdim\dY<\z@ \def\sdY{-}\else \def\sdY{+}\fi
- \dimen@=-2\K\ifdim 1\Direction<\dimen@\dimen@=6\K\fi \advance\Direction\dimen@
- \count@=\DirectionChar \ifnum\count@<32 \advance\count@96
- \else \advance\count@-32 \fi \chardef\DirectionChar=\count@
- \count@=\SemiDirectionChar \ifnum\count@<64 \advance\count@64
- \else \advance\count@-64 \fi \chardef\SemiDirectionChar=\count@
- \let\tmp@=\sinDirection
- \edef\sinDirection{\if-\cosDirection\else-\cosDirection\fi}%
- \let\cosDirection=\tmp@
- \dimen@=#1\relax \dX=\cosDirection\dimen@ \dY=\sinDirection\dimen@
- \resetupDirection@}
- \xydef@\vDirection@(#1,#2)#3{\dimen@ii=#3\relax
- \dimen@=#1\dimen@ii \dimen@ii=#2\dimen@ii
- \dX=\cosDirection\dimen@ \advance\dX-\sinDirection\dimen@ii
- \dY=\sinDirection\dimen@ \advance\dY \cosDirection\dimen@ii
- \Xp=\Xc \advance\Xp-\dX \Yp=\Yc \advance\Yp-\dY
- \setupDirection@\ignorespaces}
- \xydef@\resetDirection@{%
- \dX=\Xc\advance\dX-\Xp \dY=\Yc\advance\dY-\Yp \let\next@=\resetupDirection@
- \ifdim\sdX\dX<\z@ \let\next@=\setupDirection@i \fi
- \ifdim\sdY\dY<\z@ \let\next@=\setupDirection@i \fi
- \next@}
- \xydef@\resetupDirection@{%
- \edef\Directiontest@@##1##2{\noexpand\DN@{##2}%
- \noexpand\ifdim\noexpand\dX=\the\dX\relax
- \noexpand\ifdim\noexpand\dY=\the\dY\relax \noexpand\DN@{##1}%
- \noexpand\fi\noexpand\fi \noexpand\next@}}
- \xydef@\unsetupDirection@{\def\Directiontest@@##1##2{##2}}
- \uDirection@\xydashl@
- \message{edges,}
- \xynew@{if}\ifInside@
- \xydef@\zeroEdge#1{%
- \ifcase#1\relax \or \Inside@false \or \dimen@=\z@
- \or \or \else \Edgec={\rectangleEdge}\fi}
- \xydef@\circleEdge#1{\ifcase#1\expandafter\circleEdge@
- \or \expandafter\circleUnder@ \or \dimen@=\Rc
- \or \expandafter\circleEdge@ \or \expandafter\circleInner@
- \else \expandafter\circleOuter@ \fi}
- \xydef@\circleEdge@{%
- \dimen@=-\cosDirection\Rc \advance\Xc\dimen@
- \dimen@=-\sinDirection\Rc \advance\Yc\dimen@}
- \xydef@\circleUnder@{\Inside@false
- \ifdim\Xp=\Xc \relax \ifdim\Yp=\Yc \Inside@true \fi \fi
- \ifInside@ \else \expandafter \circleCentre@ \fi }
- \xydef@\circleCentre@{{%
- \ifdim\Lc=\Rc \relax\else
- \dimen@=\Rc\advance\dimen@-\Lc \divide\dimen@\tw@
- \advance\Xc\dimen@ \advance\Rc-\dimen@ \fi
- \dX=\Xc \advance\dX-\Xp \dX=\ifdim\dX<\z@-\fi\dX
- \ifdim\Uc=\Dc\relax \else
- \dimen@=\Uc\advance\dimen@-\Dc \divide\dimen@\tw@
- \advance\Yc\dimen@ \advance\Uc-\dimen@ \fi
- \dY=\Yc \advance\dY-\Yp \dY=\ifdim\dY<\z@-\fi\dY
- \DN@{}\ifdim\dX>\Rc \relax \else \ifdim\dY>\Uc \relax
- \else \ifdim\Uc=\Rc \DN@{\circleUnder@@}%
- \else \DN@{\ellipseUnder@@}\fi
- \fi\fi \next@ }}
- \xydef@\circleUnder@@{%
- \loop\ifdim\Rc>100\p@ \circlescale@ \repeat
- \edef\tmp@{\expandafter\removePT@\the\Rc}\dimen@=\tmp@\Rc
- \edef\tmp@{\expandafter\removePT@\the\dX}\advance\dimen@-\tmp@\dX
- \edef\tmp@{\expandafter\removePT@\the\dY}\advance\dimen@-\tmp@\dY
- \ifdim\dimen@>\z@ \aftergroup\Inside@true \fi }
- \xydef@\circlescale@{\divide\Rc\KK@ \divide\dX\KK@ \divide\dY\KK@ }
- \xydef@\ellipseUnder@@{%
- \ifdim\Rc>64\p@ \circlescale@ \divide\Uc\KK@
- \else \ifdim\Uc>64\p@ \circlescale@ \divide\Uc\KK@ \fi\fi
- \edef\tmp@{\expandafter\removePT@\the\Rc}\dY=\tmp@\dY
- \edef\tmp@{\expandafter\removePT@\the\Uc}\dX=\tmp@\dX
- \Rc=\tmp@\Rc \circleUnder@@ }
- \xydef@\circleInner@{%
- \Lc=\sdX\cosDirection\Rc \Dc=\sdY\sinDirection\Rc
- \Rc=\Lc \Uc=\Dc \Edgec={\rectangleEdge}}
- \xydef@\circleOuter@{%
- \Lc=\Rc \Dc=\Rc \Uc=\Dc \Edgec={\rectangleEdge}}
- \xydef@\rectangleEdge#1{\ifcase#1\expandafter\rectangleEdge@
- \or \expandafter\rectangleUnder@ \or \expandafter\rectangleWidth@
- \or \expandafter\rectangleProp@
- \else \relax \fi}
- \xydef@\rectangleEdge@{%
- \ifdim\dY<-.05\p@ \rectangleEdge@i
- \else\ifdim\dY<.05\p@ \rectangleEdge@ii
- \else \rectangleEdge@iii\fi\fi
- \resetupDirection@}
- \xydef@\rectangleEdge@i{%
- \ifdim\dX<-.05\p@ \settomin@\Xc+\Rc\Uc\dX\dY \settomin@\Yc+\Uc\Rc\dY\dX%1a
- \else\ifdim\dX<.05\p@ \advance\Yc\Uc
- \else \settomin@\Xc-\Lc\Uc\dX\dY \settomin@\Yc+\Uc\Lc\dY\dX
- \fi\fi}
- \xydef@\rectangleEdge@ii{%
- \ifdim\dX<-.05\p@ \advance\Xc\Rc
- \else\ifdim\dX<.05\p@
- \else \advance\Xc-\Lc
- \fi\fi}
- \xydef@\rectangleEdge@iii{%
- \ifdim\dX<-.05\p@ \settomin@\Xc+\Rc\Dc\dX\dY \settomin@\Yc-\Dc\Rc\dY\dX%3a
- \else\ifdim\dX<.05\p@ \advance\Yc-\Dc
- \else \settomin@\Xc-\Lc\Dc\dX\dY \settomin@\Yc-\Dc\Lc\dY\dX
- \fi\fi}
- \xydef@\settomin@#1#2#3#4#5#6{%
- \edef\nextii@{\A@=\the\A@ \B@=\the\B@}\quotient@\next@{#5}{#6}\nextii@
- \dimen@=\sdX\sdY\next@#4\relax
- \ifdim#3<\dimen@ \dimen@=#3\fi \advance#1#2\dimen@}
- \xydef@\rectangleUnder@{\Inside@false
- \ifdim\Xp=\Xc \ifdim\Yp=\Yc \Inside@true \fi\fi
- \ifInside@ \else
- \dimen@=\Xp \advance\dimen@-\Xc
- \ifdim \dimen@>-\Lc \relax \ifdim\dimen@<\Rc
- \dimen@=\Yp \advance\dimen@-\Yc
- \ifdim \dimen@>-\Dc \relax \ifdim\dimen@<\Uc
- \Inside@true
- \fi\fi\fi\fi\fi }
- \xydef@\rectangleWidth@{\let\next@=\rectangleWidth@i
- \ifdim\dX<-.05\p@ \A@=\Rc
- \else\ifdim\dX<.05\p@ \A@=\z@ \DN@{\dimen@=\B@}%
- \else \A@=\Lc \fi\fi
- \ifdim\dY<-.05\p@ \B@=\Uc
- \else\ifdim\dY<.05\p@ \DN@{\dimen@=\A@}%
- \else \B@=\Dc \fi\fi
- \next@}
- \xydef@\rectangleWidth@i{%
- \begingroup
- \dimen@=\sdX\cosDirection\B@
- \quotient@\next\dimen@{\sdY\sinDirection\p@}\dimen@=\next\dimen@
- \edef\next{\endgroup \dimen@=\the\dimen@}%
- \ifdim\dimen@<\B@ \B@=\the\dimen@ \fi
- \begingroup
- \dimen@=\sdY\sinDirection\A@
- \quotient@\next\dimen@{\sdX\cosDirection\p@}\dimen@=\next\dimen@
- \edef\next{\endgroup \dimen@=\the\dimen@}%
- \ifdim\dimen@<\A@ \A@=\the\dimen@ \fi
- \dimen@=\sdX\cosDirection\A@ \advance\dimen@\sdY\sinDirection\B@}
- \xydef@\rectangleProp@{%
- \enter@{\A@=\the\A@ \B@=\the\B@ \DirectionfromtheDirection@}%
- \reverseDirection@
- \dimen@=1\Direction \count@=\K \multiply\count@\tw@
- \ifnum \Direction>\count@
- \DN@{0}%
- \advance\dimen@-2\K \quotient@\nextii@{\dimen@}{2\K}%
- \else\ifnum \Direction>\z@
- \dimen@=-\dimen@ \advance\dimen@2\K \quotient@\next@{\dimen@}{2\K}%
- \DNii@{0}%
- \else\ifnum \Direction>-\count@
- \DN@{1}%
- \quotient@\nextii@{-\dimen@}{2\K}%
- \else
- \advance\dimen@4\K \quotient@\next@{\dimen@}{2\K}%
- \DNii@{1}%
- \fi\fi\fi
- \advance\Xc-\Lc \dimen@=\Lc \advance\dimen@\Rc
- \ifdim\dimen@=\z@ \advance\Xc 2\Lc \else \advance\Xc\next@\dimen@ \fi
- \advance\Yc+\Uc \dimen@=\Dc \advance\dimen@\Uc
- \ifdim\dimen@=\z@ \advance\Yc-2\Uc \advance\Yc\Upness@\Uc
- \else \advance\Yc-\nextii@\dimen@ \fi
- \leave@}
- \message{connections;}
- \xydef@\Creset@@{}
- \xydef@\Cshavep@@{\noCshavep@@}
- \xydef@\Cshavec@@{\noCshavec@@}
- \xydef@\Cslidep@@{\noCslidep@@}
- \xydef@\Cslidec@@{\noCslidec@@}
- \xydef@\Calong@@{\noCalong@@}
- \xydef@\no@@{\setupDirection@
- \edef\Creset@@{\cfromthec@ \pfromthep@ \noexpand\setupDirection@}%
- \def\Cshavep@@{\noCshavep@@}\def\Cshavec@@{\noCshavec@@}%
- \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}%
- \def\Calong@@{\noCalong@@}%
- \ifHidden@\else
- \ifdim\Yc>\Ymax \Ymax=\Yc \fi \ifdim\Yp>\Ymax \Ymax=\Yp \fi
- \ifdim\Yc<\Ymin \Ymin=\Yc \fi \ifdim\Yp<\Ymin \Ymin=\Yp \fi
- \ifdim\Xc>\Xmax \Xmax=\Xc \fi \ifdim\Xp>\Xmax \Xmax=\Xp \fi
- \ifdim\Xc<\Xmin \Xmin=\Xc \fi \ifdim\Xp<\Xmin \Xmin=\Xp \fi \fi}
- \xydef@\noCshavep@@{\setupDirection@
- \enter@{\cfromthec@ \DirectionfromtheDirection@}%
- \reverseDirection@ \cfromp@ \the\Edgec\z@
- \pfromc@ \leave@ \resetDirection@}
- \xydef@\noCshavec@@{\setupDirection@ \the\Edgec\z@ \resetDirection@}
- \xydef@\noCslidep@@#1{\dimen@=#1\relax
- \advance\Xp\cosDirection\dimen@ \advance\Yp\sinDirection\dimen@
- \resetDirection@}
- \xydef@\noCslidec@@#1{\dimen@=#1\relax
- \advance\Xc\cosDirection\dimen@ \advance\Yc\sinDirection\dimen@
- \resetDirection@}
- \xydef@\noCalong@@#1{%
- \dX=#1\dX \dY=#1\dY \Xc=\Xp \Yc=\Yp \advance\Xc\dX \advance\Yc\dY
- \resetupDirection@}
- \xydef@\Spread@@{}
- \xydef@\checkoverlap@@{}
- \xydef@\straight@#1{\setupDirection@ \def\Spread@@{#1}%
- \edef\Creset@@{\cfromthec@ \pfromthep@ \DirectionfromtheDirection@}%
- \DN@##1##2{\def\checkoverlap@@{%
- \ifdim##1\Xp>##1\Xc \let\next@=\relax \fi
- \ifdim##2\Yp>##2\Yc \let\next@=\relax \fi}}%
- \edef\nextii@{{\sdX}{\sdY}}\expandafter\next@\nextii@
- \noCshavep@@\edef\Cshavep@@{\pfromthep@ \noexpand\resetDirection@}%
- \noCshavec@@\edef\Cshavec@@{\cfromthec@ \noexpand\resetDirection@}%
- \ifHidden@\else
- \ifdim\Yc>\Ymax \Ymax=\Yc \fi \ifdim\Yp>\Ymax \Ymax=\Yp \fi
- \ifdim\Yc<\Ymin \Ymin=\Yc \fi \ifdim\Yp<\Ymin \Ymin=\Yp \fi
- \ifdim\Xc>\Xmax \Xmax=\Xc \fi \ifdim\Xp>\Xmax \Xmax=\Xp \fi
- \ifdim\Xc<\Xmin \Xmin=\Xc \fi \ifdim\Xp<\Xmin \Xmin=\Xp \fi \fi
- \ifInvisible@\let\next@=\relax
- \else\ifdim 1\Direction<-2\K \let\next@=\straightv@
- \else\ifdim 1\Direction<\z@ \let\next@=\straighth@
- \else\ifdim 1\Direction<2\K \let\next@=\straightv@
- \else \let\next@=\straighth@ \fi\fi\fi\fi
- \checkoverlap@@ \next@
- \def\Cslidep@@{\noCslidep@@}\def\Cslidec@@{\noCslidec@@}%
- \def\Calong@@{\noCalong@@}\Creset@@}
- \xydef@\straighth@{\setbox\z@=\hbox{%
- \A@=\wd\lastobjectbox@
- \B@=\dp\lastobjectbox@ \advance\B@\ht\lastobjectbox@
- \ifdim \A@=\z@ \count@@=\m@ne
- \else \dimen@=\sdX\dX \divide\dimen@\A@ \count@@=\dimen@ \fi
- \Spread@@
- \ifdim\dX>\z@ \advance\Xc-\wd\lastobjectbox@ \fi
- \dimen@=-\sdX\wd\lastobjectbox@
- \multiply\dimen@\K@dYdX \divide\dimen@\K
- \ifdim\dX>\z@ \advance\Yc\dimen@ \advance\Yc-\Leftness@\dimen@
- \else \advance\Yc\Leftness@\dimen@ \fi
- \dimen@=\wd\lastobjectbox@ \A@=\sdX\dX \advance\A@-\dimen@
- \B@=\sdX\dimen@ \multiply\B@\K@dYdX \divide\B@\K \advance\B@-\dY \B@=\sdY\B@
- \count@=\count@@ \advance\count@\m@ne
- \ifnum\z@<\count@ \divide\A@\count@ \divide\B@\count@ \fi
- \A@=-\sdX\A@ \B@=\sdY\B@ \wd\lastobjectbox@=\A@
- \kern\Xc \count@=\z@
- \loop@\ifnum\count@<\count@@ \advance\count@\@ne
- \raise\Yc\copy\lastobjectbox@ \advance\Yc\B@ \repeat@}%
- \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}
- \xydef@\straightv@{\setbox\z@=\vtop{%
- \A@=\wd\lastobjectbox@
- \B@=\dp\lastobjectbox@ \advance\B@\ht\lastobjectbox@
- \ifdim \B@=\z@ \count@@=\m@ne
- \else \dimen@=\sdY\dY \divide\dimen@\B@ \count@@=\dimen@ \fi
- \Spread@@
- \dimen@=\dp\lastobjectbox@ \advance\dimen@\ht\lastobjectbox@
- \B@=\sdY\dY \advance\B@-\dimen@
- \A@=\sdY\dimen@ \multiply\A@\K@dXdY \divide\A@\K \advance\A@-\dX
- \A@=\sdX\A@ \count@=\count@@ \advance\count@\m@ne
- \ifnum\z@<\count@ \divide\B@\count@ \divide\A@\count@ \fi
- \B@=\sdY\B@ \A@=\sdX\A@ \ht\lastobjectbox@=\B@ \dp\lastobjectbox@=\z@
- \ifdim\dY<\z@
- \advance\Yc\dimen@ \advance\Yc\Upness@\B@
- \else
- \advance\dimen@\Upness@\B@ \advance\Yc-\dimen@ \advance\Yc\B@
- \fi
- \advance\Yc\B@
- \ifdim\dX<\z@ \else \advance\Xc-\wd\lastobjectbox@ \fi
- \null \kern-\Yc \count@=\z@
- \loop@\ifnum\count@<\count@@ \advance\count@\@ne
- \nointerlineskip \moveright\Xc\copy\lastobjectbox@ \advance\Xc\A@
- \repeat@}%
- \ht\z@=\z@ \wd\z@=\z@ \dp\z@=\z@ {\Drop@@}}
- \message{XY-pic loaded}\xyuncatcodes \endinput
-